Commit 3aaaf142 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.8-20040824

parent edeb82c1
DOXYGEN Version 1.3.8-20040812
DOXYGEN Version 1.3.8-20040824
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (12 August 2004)
Dimitri van Heesch (24 August 2004)
DOXYGEN Version 1.3.8_20040812
DOXYGEN Version 1.3.8_20040824
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (12 August 2004)
Dimitri van Heesch (dimitri@stack.nl) (24 August 2004)
1.3.8-20040812
1.3.8-20040824
......@@ -1370,6 +1370,15 @@ int main(int argc,char **argv)
{
QApplication a(argc,argv);
MainWidget main;
if (argc==2 && argv[1][0]!='-') // name of config file as an argument
{
main.loadConfigFromFile(argv[1]);
}
else if (argc>1)
{
printf("Usage: %s [config file]\n",argv[0]);
exit(1);
}
a.setMainWidget(&main);
main.show();
return a.exec();
......
......@@ -242,6 +242,7 @@ class MainWidget : public QMainWindow
public:
MainWidget(QWidget *parent=0);
~MainWidget();
void loadConfigFromFile(const QString &);
private slots:
void launchWizard();
......@@ -263,7 +264,6 @@ class MainWidget : public QMainWindow
private:
void setConfigSaved(bool);
void loadConfigFromFile(const QString &);
void addRecentFile(const QString &);
QPushButton *m_wizard;
......
......@@ -234,27 +234,35 @@ if test "$f_wizard" = YES; then
if test -z "$QTDIR"; then
echo " QTDIR environment variable not set!"
echo -n " Checking for Qt..."
if test -d "/usr/lib/qt3/lib"; then
if test -d "/usr/lib/qt3/include"; then
if test -x "/usr/lib/qt3/bin/moc"; then
QTDIR="/usr/lib/qt3"
fi
fi
fi
if test -d "/usr/lib/qt2/lib"; then
if test -d "/usr/lib/qt2/include"; then
if test -x "/usr/lib/qt2/bin/moc"; then
QTDIR="/usr/lib/qt2"
fi
fi
fi
if test -d "/usr/lib/qt/lib"; then
if test -d "/usr/lib/qt/include"; then
if test -x "/usr/lib/qt/bin/moc"; then
QTDIR="/usr/lib/qt"
fi
for d in /usr/lib/{qt-3.1,qt3,qt2,qt,qt*}; do
if test -d "$d/lib" -a -d "$d/include" -a -x "$d/bin/moc"; then
QTDIR=$d
fi
fi
done
# if test -d "/usr/lib/qt3/lib"; then
# if test -d "/usr/lib/qt3/include"; then
# if test -x "/usr/lib/qt3/bin/moc"; then
# QTDIR="/usr/lib/qt3"
# fi
# fi
# fi
# if test -d "/usr/lib/qt2/lib"; then
# if test -d "/usr/lib/qt2/include"; then
# if test -x "/usr/lib/qt2/bin/moc"; then
# QTDIR="/usr/lib/qt2"
# fi
# fi
# fi
# if test -d "/usr/lib/qt/lib"; then
# if test -d "/usr/lib/qt/include"; then
# if test -x "/usr/lib/qt/bin/moc"; then
# QTDIR="/usr/lib/qt"
# fi
# fi
# fi
else
echo " Detected Qt via the QTDIR environment variable..."
echo -n " "
fi
if test -z "$QTDIR"; then
echo "QTDIR not set and Qt not found at standard locations!"
......
......@@ -20,7 +20,7 @@
All commands in the documentation start with a backslash (<b>\\</b>) or an
at-sign (<b>\@</b>). If you prefer you can replace all commands starting with a
backslash below, by their counterparts that start with an at-sign.
backslash below by their counterparts that start with an at-sign.
Some commands have one or more arguments.
Each argument has a certain range:
......@@ -350,6 +350,9 @@ doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
\note In the above example \ref cfg_javadoc_autobrief "JAVADOC_AUTOBRIEF"
has been set to YES in the configuration file.
<hr>
\section cmdfn \fn (function declaration)
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.8_20040812
Version: 1.3.8_20040824
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -1995,6 +1995,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
addType();
g_name+=yytext;
}
<Body>{SCOPENAME}/{B}*[;,)\]] { // "int var;" or "var, var2" or "debug(f) macro"
generateClassOrGlobalLink(*g_code,yytext,TRUE);
addType();
g_name+=yytext;
}
<Body>{SCOPENAME}/{B}* { // p->func()
generateClassOrGlobalLink(*g_code,yytext);
addType();
......
......@@ -48,7 +48,7 @@ class Definition
enum DefType
{
TypeClass, TypeMember, TypeFile, TypeGroup,
TypeNamespace, TypePackage, TypePage
TypeNamespace, TypePackage, TypePage, TypeDir
};
/*! Use this for dynamic inspection of the type of the derived class */
virtual DefType definitionType() = 0;
......
#include "dirdef.h"
#include "filename.h"
#include "doxygen.h"
#include "util.h"
//----------------------------------------------------------------------
// method implementation
DirDef::DirDef(const char *path) : Definition(path,1,path),
m_parent(0)
{
// get short name (stipping the paths mentioned in STRIP_FROM_PATH)
m_dispName = stripFromPath(path);
m_subdirs.setAutoDelete(TRUE);
m_fileList = new FileList;
m_classSDict = new ClassSDict(17);
}
DirDef::~DirDef()
{
}
void DirDef::addSubDir(DirDef *subdir)
{
m_subdirs.append(subdir);
subdir->m_parent=this;
}
void DirDef::addFile(FileDef *fd)
{
m_fileList->append(fd);
fd->setDirDef(this);
}
//----------------------------------------------------------------------
// helper functions
DirDef *DirDef::createNewDir(const char *path)
{
ASSERT(path!=0);
DirDef *dir = Doxygen::directories.find(path);
if (dir==0) // new dir
{
//printf("Adding new dir %s\n",path);
dir = new DirDef(path);
Doxygen::directories.inSort(path,dir);
}
return dir;
}
bool DirDef::matchPath(const QCString &path,QStrList &l)
{
const char *s=l.first();
while (s)
{
QCString prefix = s;
if (stricmp(prefix.left(path.length()),path)==0) // case insensitive compare
{
return TRUE;
}
s = l.next();
}
return FALSE;
}
/*! strip part of \a path if it matches
* one of the paths in the Config_getList("STRIP_FROM_PATH") list
*/
DirDef *DirDef::mergeDirectoryInTree(const QCString &path)
{
int p=0,i=0;
DirDef *dir=0;
while ((i=path.find('/',p))!=-1)
{
QCString part=path.left(i+1);
if (!matchPath(part,Config_getList("STRIP_FROM_PATH")))
{
dir=createNewDir(part);
}
p=i+1;
}
return dir;
}
//----------------------------------------------------------------------
// external functions
void buildDirectories()
{
// for each input file
FileNameListIterator fnli(Doxygen::inputNameList);
FileName *fn;
for (fnli.toFirst();(fn=fnli.current());++fnli)
{
FileNameIterator fni(*fn);
FileDef *fd;
for (;(fd=fni.current());++fni)
{
if (!fd->getReference().isEmpty())
{
DirDef *dir;
if ((dir=Doxygen::directories.find(fd->getPath()))==0) // new directory
{
dir = DirDef::mergeDirectoryInTree(fd->getPath());
}
if (dir) dir->addFile(fd);
}
else
{
// do something for file imported via tag files.
}
}
}
DirDef *root = new DirDef("root:");
// compute relations between directories => introduce container dirs.
DirDef *dir;
SDict<DirDef>::Iterator sdi(Doxygen::directories);
for (sdi.toFirst();(dir=sdi.current());++sdi)
{
printf("New dir %s\n",dir->displayName().data());
QCString name = dir->name();
int i=name.findRev('/',name.length()-2);
if (i!=-1)
{
DirDef *parent = Doxygen::directories.find(name.left(i+1));
if (parent==0) parent=root;
parent->addSubDir(dir);
printf("DirDef::addSubdir(): Adding subdir\n%s to\n%s\n",
dir->displayName().data(), parent->displayName().data());
}
}
}
/******************************************************************************
*
*
*
* Copyright (C) 1997-2004 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef DIRDEF_H
#define DIRDEF_H
#include "qtbc.h"
#include "sortdict.h"
#include "definition.h"
class FileList;
class ClassSDict;
class QStrList;
class FileDef;
class DirDef : public Definition
{
public:
DirDef(const char *path);
virtual ~DirDef();
virtual DefType definitionType() { return TypeDir; }
virtual QCString getOutputFileBase() const { return ""; }
virtual bool isLinkableInProject() const { return FALSE; }
virtual bool isLinkable() const { return FALSE; }
QCString displayName() const { return m_dispName; }
void addSubDir(DirDef *subdir);
FileList * getFiles() const { return m_fileList; }
ClassSDict * getClasses() const { return m_classSDict; }
DirDef *parent() const { return m_parent; }
void addFile(FileDef *fd);
static DirDef *mergeDirectoryInTree(const QCString &path);
private:
static DirDef *createNewDir(const char *path);
static bool matchPath(const QCString &path,QStrList &l);
QList<DirDef> m_subdirs;
DirDef *m_parent;
QCString m_dispName;
FileList *m_fileList; // list of files in the group
ClassSDict *m_classSDict; // list of classes in the group
};
void buildDirectories();
#endif
......@@ -747,6 +747,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
MemberDef *member=0;
QString name = linkToText(g_token->name,TRUE);
int len = g_token->name.length();
ClassDef *cd=0;
if (!g_insideHtmlLink &&
resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member))
{
......@@ -784,6 +785,16 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
handleLinkedWord(parent,children);
children.append(new DocWord(parent,":"));
}
else if (!g_insideHtmlLink && (cd=getClass(g_token->name+"-p")))
{
// special case 2, where the token name is not a class, but could
// be a Obj-C protocol
children.append(new
DocLinkedWord(parent,name,
cd->getReference(),
cd->getOutputFileBase(),
""));
}
else // normal non-linkable word
{
children.append(new DocWord(parent,g_token->name));
......@@ -4383,15 +4394,25 @@ reparsetoken:
goto endparagraph;
}
}
// determine list depth
int depth = 0;
n=parent();
while(n) {
if(n->kind() == DocNode::Kind_AutoList) ++depth;
n=n->parent();
}
// first item or sub list => create new list
DocAutoList *al=0;
do
{
al = new DocAutoList(this,g_token->indent,g_token->isEnumList);
al = new DocAutoList(this,g_token->indent,g_token->isEnumList,
depth);
m_children.append(al);
retval = al->parse();
} while (retval==TK_LISTITEM && // new list
al->indent()==g_token->indent // at some indent level
al->indent()==g_token->indent // at same indent level
);
// check the return value
......
......@@ -507,12 +507,15 @@ class DocCopy : public CompAccept<DocCopy>, public DocNode
class DocAutoList : public CompAccept<DocAutoList>, public DocNode
{
public:
DocAutoList(DocNode *parent,int indent,bool isEnumList) :
m_parent(parent), m_indent(indent), m_isEnumList(isEnumList) {}
DocAutoList(DocNode *parent,int indent,bool isEnumList,
int depth) :
m_parent(parent), m_indent(indent), m_isEnumList(isEnumList),
m_depth(depth) {}
Kind kind() const { return Kind_AutoList; }
bool isEnumList() const { return m_isEnumList; }
int indent() const { return m_indent; }
DocNode *parent() const { return m_parent; }
int depth() const { return m_depth; }
void accept(DocVisitor *v) { CompAccept<DocAutoList>::accept(this,v); }
int parse();
......@@ -520,6 +523,7 @@ class DocAutoList : public CompAccept<DocAutoList>, public DocNode
DocNode *m_parent;
int m_indent;
bool m_isEnumList;
int m_depth;
};
......
......@@ -962,7 +962,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QDir thisDir;
// put each connected subgraph of the hierarchy in a row of the HTML output
out << "<table border=0 cellspacing=10 cellpadding=0>" << endl;
out << "<table border=\"0\" cellspacing=\"10\" cellpadding=\"0\">" << endl;
QListIterator<DotNode> dnli(*m_rootSubgraphs);
DotNode *n;
......@@ -2105,11 +2105,21 @@ DotCallGraph::DotCallGraph(MemberDef *md,int maxRecursionDepth)
m_maxDistance = 0;
m_recDepth = maxRecursionDepth;
m_diskName = md->getOutputFileBase()+"_"+md->anchor();
m_scope = md->getOuterScope();
QCString uniqueId;
uniqueId = md->getReference()+"$"+
md->getOutputFileBase()+"#"+md->anchor();
QCString name;
if (Config_getBool("HIDE_SCOPE_NAMES"))
{
name = md->name();
}
else
{
name = md->qualifiedName();
}
m_startNode = new DotNode(m_curNodeNumber++,
md->qualifiedName(),
linkToText(name,FALSE),
uniqueId.data(),
0, // distance
TRUE // root node
......@@ -2280,9 +2290,19 @@ void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance)
}
else
{
QCString name;
if (Config_getBool("HIDE_SCOPE_NAMES"))
{
name = rmd->getOuterScope()==m_scope ?
rmd->name() : rmd->qualifiedName();
}
else
{
name = rmd->qualifiedName();
}
bn = new DotNode(
m_curNodeNumber++,
rmd->qualifiedName(),
linkToText(name,FALSE),
uniqueId,
distance
);
......
......@@ -30,6 +30,7 @@ class QTextStream;
class DotNodeList;
class ClassSDict;
class MemberDef;
class Definition;
enum GraphOutputFormat { BITMAP , EPS };
......@@ -197,6 +198,7 @@ class DotCallGraph
int m_maxDistance;
int m_recDepth;
QCString m_diskName;
Definition * m_scope;
};
void generateGraphLegend(const char *path);
......
......@@ -43,6 +43,7 @@
#include "tagreader.h"
#include "dot.h"
#include "docparser.h"
#include "dirdef.h"
#include "outputlist.h"
#include "declinfo.h"
......@@ -120,6 +121,7 @@ SDict<DefinitionList> *Doxygen::symbolMap;
bool Doxygen::outputToWizard=FALSE;
QDict<int> * Doxygen::htmlDirMap = 0;
QCache<LookupInfo> Doxygen::lookupCache(20000,20000);
SDict<DirDef> Doxygen::directories(17);
static StringList inputFiles;
static StringDict excludeNameDict(1009); // sections
......@@ -2731,7 +2733,8 @@ static void transferFunctionDocumentation()
mdef->getGroupPri(),
mdef->docFile(),
mdef->docLine(),
mdef->hasDocumentation()
mdef->hasDocumentation(),
mdef
);
}
else if (mdef->getGroupDef()==0 && mdec->getGroupDef()!=0)
......@@ -2740,7 +2743,8 @@ static void transferFunctionDocumentation()
mdec->getGroupPri(),
mdec->docFile(),
mdec->docLine(),
mdec->hasDocumentation()
mdec->hasDocumentation(),
mdec
);
}
......@@ -6683,13 +6687,14 @@ static void buildExampleList(Entry *root)
else
{
PageDef *pd=new PageDef(root->fileName,root->startLine,
root->name,root->doc,root->args);
root->name,root->doc,root->args);
pd->setFileName(convertNameToFile(pd->name()+"-example"));
pd->addSectionsToDefinition(root->anchors);
//pi->addSections(root->anchors);
Doxygen::exampleSDict->inSort(root->name,pd);
addExampleToGroups(root,pd);
//we don't add example to groups
//addExampleToGroups(root,pd);
}
}
}
......@@ -8252,6 +8257,9 @@ void parseInput()
msg("Freeing input...\n");
input.resize(0);
//msg("Building directory list...\n");
//buildDirectories();
msg("Building group list...\n");
buildGroupList(root);
organizeSubGroups(root);
......
......@@ -40,6 +40,7 @@ class PageSList;
class PageSDict;
class PageDef;
class SearchIndex;
class DirDef;
typedef QList<QCString> StringList;
typedef QDict<FileDef> FileDict;
......@@ -112,6 +113,7 @@ class Doxygen
static bool outputToWizard;
static QDict<int> *htmlDirMap;
static QCache<LookupInfo> lookupCache;
static SDict<DirDef> directories;
};
void initDoxygen();
......
......@@ -904,6 +904,7 @@ static void mergeFileDef(Directory *root,FileDef *fd)
dirNode->addChild(e);
}
#if 0
static void generateIndent(QTextStream &t,DirEntry *de,int level)
{
if (de->parent())
......@@ -949,7 +950,6 @@ static void generateIndent(QTextStream &t,DirEntry *de,int level)
}
}
#if 0
static void writeDirTreeNode(QTextStream &t,Directory *root,int level)
{
QCString indent;
......@@ -989,16 +989,17 @@ static void addDirsAsGroups(Directory *root,GroupDef *parent,int level)
{
gd = new GroupDef("<generated>",
1,
root->name(), // name
root->path(), // name
root->name() // title
);
if (parent)
{
parent->addGroup(gd);
gd->makePartOfGroup(parent);
}
else
{
Doxygen::groupSDict.append(root->name(),gd);
Doxygen::groupSDict.append(root->path(),gd);
}
}
QListIterator<DirEntry> dli(root->children());
......
......@@ -38,6 +38,7 @@ class NamespaceDef;
class NamespaceSDict;
class MemberGroupSDict;
class PackageDef;
class DirDef;
struct IncludeInfo
{
......@@ -133,6 +134,9 @@ class FileDef : public Definition
void setPackageDef(PackageDef *pd) { package=pd; }
PackageDef *packageDef() const { return package; }
void setDirDef(DirDef *dd) { dir=dd; }
DirDef *getDirDef() const { return dir; }
void addUsingDirective(NamespaceDef *nd);
NamespaceSDict *getUsedNamespaces() const { return usingDirList; }
void addUsingDeclaration(Definition *def);
......@@ -201,8 +205,8 @@ class FileDef : public Definition
QIntDict<MemberDef> *srcMemberDict;
bool isSource;
PackageDef *package;
DirDef *dir;
};
......@@ -250,18 +254,23 @@ class DirEntry
public:
enum EntryKind { Dir, File };
DirEntry(DirEntry *parent,FileDef *fd)
: m_parent(parent), m_kind(File), m_fd(fd), m_isLast(FALSE) { }
DirEntry(DirEntry *parent)
: m_parent(parent), m_kind(Dir), m_fd(0), m_isLast(FALSE) { }
: m_parent(parent), m_name(fd->name()), m_kind(File), m_fd(fd),
m_isLast(FALSE) { }
DirEntry(DirEntry *parent,QCString name)
: m_parent(parent), m_name(name), m_kind(Dir),
m_fd(0), m_isLast(FALSE) { }
virtual ~DirEntry() { }
EntryKind kind() const { return m_kind; }
FileDef *file() const { return m_fd; }
bool isLast() const { return m_isLast; }
void setLast(bool b) { m_isLast=b; }
DirEntry *parent() const { return m_parent; }
QCString name() const { return m_name; }
QCString path() const { return parent() ? parent()->path()+"/"+name() : name(); }
protected:
DirEntry *m_parent;
QCString m_name;
private:
EntryKind m_kind;
FileDef *m_fd;
......@@ -273,17 +282,15 @@ class Directory : public DirEntry
{
public:
Directory(Directory *parent,const QCString &name)
: DirEntry(parent), m_name(name)
: DirEntry(parent,name)
{ m_children.setAutoDelete(TRUE); }
virtual ~Directory() {}
void addChild(DirEntry *d) { m_children.append(d); d->setLast(TRUE); }
QList<DirEntry> &children() { return m_children; }
void rename(const QCString &name) { m_name=name; }
void reParent(Directory *parent) { m_parent=parent; }
QCString name() const { return m_name; }
private:
QCString m_name;
QList<DirEntry> m_children;
};
......
......@@ -828,7 +828,8 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if (success)
{
//printf("insertMember successful\n");
md->setGroupDef(fgd,pri,root->fileName,root->startLine,!root->doc.isEmpty());
md->setGroupDef(fgd,pri,root->fileName,root->startLine,
!root->doc.isEmpty());
ClassDef *cd = md->getClassDefOfAnonymousType();
if (cd) cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
}
......
......@@ -119,8 +119,7 @@ class GroupDef : public Definition
FileList *fileList; // list of files in the group
ClassSDict *classSDict; // list of classes in the group
NamespaceList *namespaceList; // list of namespaces in the group
GroupList *groupList; // list of sub groups.
//GroupList *parentGroupList; // list of parent groups.
GroupList *groupList; // list of sub groups.
PageSDict *pageDict; // list of pages in the group
PageSDict *exampleDict; // list of examples in the group
......
......@@ -29,6 +29,10 @@
#include "htmlgen.h"
static const int NUM_HTML_LIST_TYPES = 4;
static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
static QString htmlAttribsToString(const HtmlAttribList &attribs)
{
QString result;
......@@ -327,12 +331,21 @@ void HtmlDocVisitor::visit(DocIndexEntry *)
// visitor functions for compound nodes
//--------------------------------------
void HtmlDocVisitor::visitPre(DocAutoList *l)
{
if (m_hide) return;
if (l->isEnumList())
{
m_t << "<ol>";
//
// Do list type based on depth:
// 1.
// a.
// i.
// A.
// 1. (repeat)...
//
m_t << "<ol type=" << types[l->depth() % NUM_HTML_LIST_TYPES] << ">";
}
else
{
......
......@@ -52,42 +52,37 @@ static const char *defaultStyleSheet =
"DIV.qindex {\n"
" width: 100%;\n"
" background-color: #eeeeff;\n"
" border: 1px solid #B0B0B0;\n"
" border: 1px solid #b0b0b0;\n"
" text-align: center;\n"
" margin: 2px;\n"
" padding: 2px;\n"
" line-height: 120%;\n"
" line-height: 140%;\n"
"}\n"
"A.qindex {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D;\n"
" padding: 2px;\n"
"}\n"
"A.qindex:visited {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D\n"
" padding: 2px;\n"
"}\n"
"A.qindex:hover {\n"
" text-decoration: none;\n"
" background-color: #ddddff;\n"
" padding: 2px;\n"
"}\n"
"A.qindexHL {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" background-color: #6666cc;\n"
" color: #ffffff;\n"
" padding: 2px 6px;\n"
" border: 1px double #9295C2;\n"
"}\n"
"A.qindexHL:hover {\n"
" text-decoration: none;\n"
" background-color: #6666cc;\n"
" color: #ffffff;\n"
" padding: 2px 6px;\n"
"}\n"
"A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }\n"
"A.el { text-decoration: none; font-weight: bold }\n"
......@@ -359,9 +354,9 @@ void HtmlGenerator::writeFooterFile(QFile &file)
QTextStream t(&file);
t << "<hr size=\"1\"><address style=\"align: right;\"><small>\n";
t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
t << " <a href=\"http://www.doxygen.org/index.html\">"
t << "&nbsp;<a href=\"http://www.doxygen.org/index.html\">"
<< "<img src=\"doxygen.png\" alt=\"doxygen\" "
<< "align=\"middle\" border=0>"
<< "align=\"middle\" border=\"0\">"
<< "</a> $doxygenversion";
t << "</small></address>\n"
<< "</body>\n"
......@@ -446,9 +441,9 @@ static void writePageFooter(QTextStream &t,const QCString &lastTitle,
dateToString(TRUE),
Config_getString("PROJECT_NAME")
);
t << endl << "<a href=\"http://www.doxygen.org/index.html\">";
t << "&nbsp;" << endl << "<a href=\"http://www.doxygen.org/index.html\">";
t << endl << "<img src=\"" << relPath << "doxygen.png\" alt=\"doxygen\" "
<< "align=\"middle\" border=0 >" << "</a> " << versionString << " ";
<< "align=\"middle\" border=\"0\">" << "</a> " << versionString << " ";
t << "</small></address>";
if (Debug::isFlagSet(Debug::Validate))
{
......@@ -529,7 +524,7 @@ void HtmlGenerator::writeStyleInfo(int part)
void HtmlGenerator::startDoxyAnchor(const char *,const char *,
const char *anchor, const char *name)
{
t << "<a class=\"anchor\" name=\"" << anchor << "\" doxytag=\"" << name << "\" ></a>";
t << "<a class=\"anchor\" name=\"" << anchor << "\" doxytag=\"" << name << "\"></a>";
}
void HtmlGenerator::endDoxyAnchor(const char *,const char *)
......@@ -859,9 +854,9 @@ void HtmlGenerator::startMemberItem(int annoType)
t << "<tr>";
switch(annoType)
{
case 0: t << "<td class=\"memItemLeft\" nowrap align=right valign=top>"; break;
case 0: t << "<td class=\"memItemLeft\" nowrap align=\"right\" valign=\"top\">"; break;
case 1: t << "<td class=\"memItemLeft\" nowrap>"; break;
default: t << "<td class=\"memItemLeft\" nowrap valign=top>"; break;
default: t << "<td class=\"memItemLeft\" nowrap valign=\"top\">"; break;
}
}
else
......@@ -886,7 +881,7 @@ void HtmlGenerator::insertMemberAlign()
DBG_HTML(t << "<!-- insertMemberAlign -->" << endl)
if (Config_getBool("HTML_ALIGN_MEMBERS"))
{
t << "&nbsp;</td><td class=\"memItemRight\" valign=bottom>";
t << "&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\">";
}
}
......@@ -921,7 +916,7 @@ void HtmlGenerator::startMemberSections()
DBG_HTML(t << "<!-- startMemberSections -->" << endl)
if (Config_getBool("HTML_ALIGN_MEMBERS"))
{
t << "<table border=0 cellpadding=0 cellspacing=0>" << endl;
t << "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">" << endl;
// HTML is not recursively decomposable, sorry
t << "<tr><td></td></tr>" << endl;
}
......@@ -941,7 +936,7 @@ void HtmlGenerator::startMemberHeader()
DBG_HTML(t << "<!-- startMemberHeader -->" << endl)
if (Config_getBool("HTML_ALIGN_MEMBERS"))
{
t << "<tr><td colspan=2><br><h2>";
t << "<tr><td colspan=\"2\"><br><h2>";
}
else
{
......@@ -965,7 +960,7 @@ void HtmlGenerator::endMemberHeader()
void HtmlGenerator::startMemberSubtitle()
{
DBG_HTML(t << "<!-- startMemberSubtitle -->" << endl)
if (Config_getBool("HTML_ALIGN_MEMBERS")) t << "<tr><td colspan=2>";
if (Config_getBool("HTML_ALIGN_MEMBERS")) t << "<tr><td colspan=\"2\">";
}
void HtmlGenerator::endMemberSubtitle()
......@@ -1036,7 +1031,7 @@ void HtmlGenerator::startMemberDocName(bool align)
t << " <tr>" << endl;
t << " <td class=\"md\" nowrap valign=\"top\"";
if (align) t << " align=\"right\"";
t << "> ";
t << ">";
}
void HtmlGenerator::endMemberDocName()
......@@ -1213,7 +1208,7 @@ void HtmlGenerator::startIndent()
//t << "<div class=\"in\">" << endl;
t << "<table cellspacing=5 cellpadding=0 border=0>\n"
t << "<table cellspacing=\"5\" cellpadding=\"0\" border=\"0\">\n"
" <tr>\n"
" <td>\n"
" &nbsp;\n"
......
......@@ -172,11 +172,11 @@ class HtmlGenerator : public OutputGenerator
void writeNonBreakableSpace(int);
void startDescTable()
{ t << "<table border=0 cellspacing=2 cellpadding=0>" << endl; }
{ t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; }
void endDescTable()
{ t << "</table>" << endl; }
void startDescTableTitle()
{ t << "<tr><td valign=top><em>"; }
{ t << "<tr><td valign=\"top\"><em>"; }
void endDescTableTitle()
{ t << "</em>&nbsp;</td>"; }
void startDescTableData()
......
......@@ -544,31 +544,32 @@ void writeClassTree(BaseClassList *cl,int level)
void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &started,int level)
{
if (cd->isVisibleInHierarchy() && !cd->visited)
//printf("writeClassTreeNode(%s) visited=%d\n",cd->name().data(),cd->visited);
if (cd->isVisibleInHierarchy() && !cd->visited)
{
if (!started)
{
if (!started)
started=TRUE;
}
bool hasChildren = classHasVisibleChildren(cd);
//printf("node: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
{
if (hasHtmlHelp)
{
started=TRUE;
HtmlHelp::getInstance()->addContentsItem(hasChildren,cd->displayName(),cd->getOutputFileBase());
}
bool hasChildren = classHasVisibleChildren(cd);
//printf("node: Has children %s: %d\n",cd->name().data(),hasChildren);
if (cd->isLinkable())
if (hasFtvHelp)
{
if (hasHtmlHelp)
{
HtmlHelp::getInstance()->addContentsItem(hasChildren,cd->displayName(),cd->getOutputFileBase());
}
if (hasFtvHelp)
{
FTVHelp::getInstance()->addContentsItem(hasChildren,cd->getReference(),cd->getOutputFileBase(),0,cd->displayName());
}
FTVHelp::getInstance()->addContentsItem(hasChildren,cd->getReference(),cd->getOutputFileBase(),0,cd->displayName());
}
if (hasChildren)
{
writeClassTree(cd->subClasses(),level+1);
}
cd->visited=TRUE;
}
if (hasChildren)
{
writeClassTree(cd->subClasses(),level+1);
}
cd->visited=TRUE;
}
}
void writeClassTree(ClassList *cl,int level)
......@@ -578,7 +579,11 @@ void writeClassTree(ClassList *cl,int level)
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
ClassListIterator cli(*cl);
bool started=FALSE;
for ( ; cli.current() ; ++cli)
for ( cli.toFirst() ; cli.current() ; ++cli)
{
cli.current()->visited=FALSE;
}
for ( cli.toFirst() ; cli.current() ; ++cli)
{
writeClassTreeNode(cli.current(),hasHtmlHelp,hasFtvHelp,started,level);
}
......@@ -591,7 +596,11 @@ void writeClassTree(ClassSDict *d,int level)
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
ClassSDict::Iterator cli(*d);
bool started=FALSE;
for ( ; cli.current() ; ++cli)
for ( cli.toFirst() ; cli.current() ; ++cli)
{
cli.current()->visited=FALSE;
}
for ( cli.toFirst() ; cli.current() ; ++cli)
{
writeClassTreeNode(cli.current(),hasHtmlHelp,hasFtvHelp,started,level);
}
......@@ -1356,7 +1365,7 @@ void writeAlphabeticalClassList(OutputList &ol)
alphaLinks += "</div><p>\n";
ol.writeString(alphaLinks);
ol.writeString("<table align=center width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
ol.writeString("<table align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
// the number of columns in the table
const int columns = Config_getInt("COLS_IN_ALPHA_INDEX");
......@@ -2835,7 +2844,21 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
ftvHelp->incContentsDepth();
}
writeClassTree(gd->classSDict,1);
ClassDef *cd;
ClassSDict::Iterator cdi(*gd->classSDict);
for (cdi.toFirst();(cd=cdi.current());++cdi)
{
if (cd->isLinkable())
{
//printf("node: Has children %s\n",cd->name().data());
if (htmlHelp)
htmlHelp->addContentsItem(FALSE,cd->displayName(),cd->getOutputFileBase());
if (ftvHelp)
ftvHelp->addContentsItem(FALSE,cd->getReference(),cd->getOutputFileBase(),0,cd->displayName());
}
}
//writeClassTree(gd->classSDict,1);
if(htmlHelp) htmlHelp->decContentsDepth();
if(ftvHelp) ftvHelp->decContentsDepth();
}
......
......@@ -33,6 +33,7 @@ HEADERS = bufstr.h \
define.h \
definition.h \
diagram.h \
dirdef.h \
docparser.h \
doctokenizer.h \
docvisitor.h \
......@@ -136,6 +137,7 @@ SOURCES = ce_lex.cpp \
define.cpp \
definition.cpp \
diagram.cpp \
dirdef.cpp \
docparser.cpp \
doctokenizer.cpp \
dot.cpp \
......
......@@ -25,138 +25,113 @@
unsigned char doxygen_png_data[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x2d,
0x08, 0x03, 0x00, 0x00, 0x00, 0x6f, 0x6b, 0x3e, 0xc2, 0x00, 0x00, 0x03,
0x00, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xbf, 0xbe, 0xa4, 0xf7,
0xe4, 0x8c, 0xff, 0xfe, 0xd8, 0xf4, 0xda, 0x6f, 0xda, 0xcb, 0x86, 0xf9,
0xeb, 0xa1, 0xde, 0xdb, 0xb4, 0x00, 0x00, 0x00, 0xb9, 0xab, 0x71, 0xdf,
0xdf, 0xc4, 0x5b, 0x51, 0x26, 0xff, 0xff, 0xe1, 0xd7, 0xc3, 0x6d, 0xae,
0x92, 0x2b, 0xd5, 0xbb, 0x57, 0xf1, 0xcd, 0x49, 0xee, 0xc4, 0x30, 0xd1,
0xad, 0x2d, 0x3d, 0x37, 0x1d, 0x67, 0x5e, 0x37, 0x60, 0x5f, 0x50, 0x40,
0x3f, 0x32, 0xfd, 0xf8, 0xc9, 0xfc, 0xf4, 0xbc, 0xdc, 0xd4, 0x9f, 0xfb,
0xf0, 0xaf, 0x1f, 0x1d, 0x13, 0xff, 0xcc, 0xcc, 0xdf, 0xb2, 0xb2, 0xa9,
0x22, 0x22, 0x12, 0x14, 0x3e, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x22,
0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x26,
0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x2a,
0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2e,
0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x32,
0x32, 0x32, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x36,
0x36, 0x36, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x3a,
0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3e,
0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x42,
0x42, 0x42, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x46,
0x46, 0x46, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a,
0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4e,
0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52,
0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56,
0x56, 0x56, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a,
0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, 0x5e,
0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x62,
0x62, 0x62, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x66,
0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x6a,
0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72,
0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76,
0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e,
0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
0x82, 0x82, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86,
0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a,
0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8e,
0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92,
0x92, 0x92, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x96,
0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a,
0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9e,
0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2,
0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa6,
0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xaa,
0xaa, 0xaa, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb2,
0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5, 0xb6,
0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba,
0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbe,
0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc2,
0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc6,
0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xca,
0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xce,
0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd2,
0xd2, 0xd2, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd6,
0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xda,
0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdd, 0xdd, 0xdd, 0xde,
0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe2,
0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe6,
0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xea,
0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xee,
0xee, 0xee, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf2,
0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf6,
0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xfa,
0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfe,
0xfe, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0x33, 0xef, 0x22, 0x00, 0x00, 0x00,
0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
0x00, 0x01, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x88, 0x05, 0x1d, 0x48, 0x00,
0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x6e, 0xbd, 0x00,
0x00, 0x6e, 0xbd, 0x01, 0x84, 0x9a, 0x17, 0x68, 0x00, 0x00, 0x00, 0x07,
0x74, 0x49, 0x4d, 0x45, 0x07, 0xd3, 0x0a, 0x08, 0x15, 0x0b, 0x1c, 0x3a,
0x62, 0x10, 0x70, 0x00, 0x00, 0x02, 0xa1, 0x49, 0x44, 0x41, 0x54, 0x78,
0xda, 0xed, 0x56, 0x6b, 0x8f, 0xda, 0x30, 0x10, 0xc4, 0x0d, 0x69, 0xd6,
0xce, 0x03, 0x88, 0x89, 0x4b, 0xf0, 0xd1, 0xff, 0xff, 0x33, 0xbb, 0xb3,
0x6b, 0xc7, 0x86, 0x0f, 0x77, 0x42, 0x3a, 0x2a, 0xb5, 0x62, 0x25, 0xf0,
0xcc, 0xbe, 0xc6, 0x31, 0xc9, 0x86, 0xdd, 0xae, 0x18, 0xa9, 0xed, 0x5e,
0x6a, 0x64, 0x9c, 0x73, 0xe6, 0xd5, 0x22, 0xae, 0x69, 0x1a, 0xf7, 0x16,
0x79, 0x8b, 0xfc, 0xc3, 0x22, 0xc3, 0x5f, 0x11, 0x19, 0x86, 0xd7, 0x89,
0xa4, 0x81, 0x92, 0x45, 0x88, 0xca, 0x84, 0xa9, 0x97, 0x32, 0x74, 0x2a,
0x6f, 0x99, 0x45, 0x05, 0xd3, 0x7d, 0x40, 0x83, 0x98, 0x27, 0x6c, 0x83,
0x8a, 0x64, 0x8a, 0x11, 0x03, 0xac, 0x8b, 0x59, 0x68, 0x31, 0x69, 0xea,
0xa8, 0x77, 0xab, 0xd3, 0x94, 0xcc, 0x4c, 0xe5, 0xdf, 0xa6, 0x14, 0xbb,
0x86, 0x62, 0x8e, 0x82, 0xd9, 0xb0, 0x11, 0xec, 0x42, 0x0c, 0x0e, 0x11,
0x4e, 0x94, 0xd3, 0x24, 0xf5, 0x56, 0x75, 0x8e, 0xaa, 0x2e, 0x86, 0xaa,
0x86, 0x49, 0xa5, 0x76, 0x49, 0xab, 0xa1, 0x4e, 0x91, 0xef, 0x45, 0x0f,
0xd2, 0x69, 0x11, 0x59, 0x01, 0xe1, 0xae, 0x95, 0x54, 0xe5, 0xc3, 0x70,
0xc3, 0x83, 0x4a, 0x6a, 0x9a, 0x4e, 0x2b, 0x67, 0x6c, 0x87, 0xa7, 0xc5,
0xf8, 0x2c, 0x7a, 0x01, 0x94, 0x6e, 0x90, 0x20, 0x22, 0x9a, 0xe7, 0x28,
0x6d, 0xa0, 0xda, 0x8d, 0x56, 0xa5, 0x3b, 0x49, 0x9e, 0x8e, 0xc6, 0xf0,
0x91, 0x98, 0x46, 0x9e, 0x93, 0x3b, 0xca, 0xfb, 0x6d, 0xd4, 0x4c, 0x24,
0xc1, 0xbc, 0x69, 0x0d, 0x18, 0xf9, 0xf6, 0x70, 0x3a, 0xf1, 0xe1, 0xcc,
0xb4, 0x85, 0xb6, 0x5c, 0x5c, 0x93, 0x1e, 0x3c, 0xf5, 0x77, 0x81, 0x28,
0x86, 0x0e, 0x88, 0x12, 0xa5, 0x44, 0x4d, 0xd2, 0x80, 0x0b, 0xb8, 0x5b,
0xc4, 0x1f, 0x62, 0x97, 0xca, 0x0c, 0xb2, 0xc4, 0xb7, 0x68, 0x2f, 0x43,
0x25, 0x03, 0x31, 0x16, 0xe9, 0x7e, 0xb1, 0x75, 0x91, 0x5b, 0x44, 0xc0,
0x8e, 0x1e, 0x68, 0xd0, 0x84, 0x85, 0x44, 0x17, 0x10, 0x9c, 0x6f, 0xa1,
0x0e, 0xde, 0xc8, 0x22, 0xc8, 0xd2, 0x24, 0x89, 0x04, 0x09, 0x71, 0x8f,
0xa8, 0x4e, 0x11, 0xb9, 0xb0, 0xad, 0xd2, 0x75, 0x05, 0xa2, 0x07, 0x1a,
0xb0, 0x5c, 0x2e, 0x46, 0x5c, 0xe6, 0xa2, 0xb6, 0x72, 0x27, 0x60, 0xb3,
0x44, 0xc4, 0x3b, 0x5a, 0x73, 0x80, 0x3d, 0x24, 0x6c, 0x8d, 0xd2, 0x80,
0x3b, 0xe0, 0xb8, 0xae, 0x6c, 0xab, 0x9c, 0xcf, 0x0a, 0x44, 0x42, 0x79,
0x87, 0x42, 0x6d, 0xb0, 0xd7, 0xeb, 0x96, 0xa1, 0x29, 0x70, 0x03, 0x23,
0xb2, 0xae, 0x5a, 0xa4, 0x59, 0xab, 0x5d, 0x16, 0x6b, 0x03, 0x89, 0x8f,
0x45, 0xc4, 0x27, 0x3f, 0x7c, 0xfb, 0x93, 0xcd, 0xf2, 0x2f, 0x6d, 0x01,
0x5a, 0xe1, 0xf6, 0xac, 0xb4, 0x55, 0xa7, 0x66, 0xe0, 0x52, 0x94, 0xb6,
0xf2, 0x30, 0x87, 0x36, 0xc7, 0x56, 0xc5, 0xed, 0xf9, 0x6c, 0x79, 0xb5,
0xd2, 0xa2, 0x8d, 0xb1, 0xd5, 0x5c, 0x88, 0xd8, 0x1f, 0xb0, 0xb6, 0x6d,
0x75, 0x55, 0x9e, 0xa8, 0xf5, 0x4a, 0x14, 0x73, 0x63, 0xaf, 0x50, 0x47,
0x86, 0xd5, 0x12, 0x14, 0x45, 0x5b, 0x12, 0x79, 0x9f, 0xf8, 0x66, 0x11,
0x65, 0xbb, 0xa2, 0x92, 0x6c, 0xa4, 0x3e, 0xa1, 0xfd, 0x7e, 0x3f, 0xf6,
0x23, 0x5c, 0xde, 0x8f, 0xda, 0x9a, 0x0f, 0x51, 0x1c, 0x79, 0x30, 0x79,
0x3b, 0x8e, 0xda, 0x88, 0xaa, 0x2e, 0x23, 0x49, 0x52, 0x94, 0x5c, 0x66,
0xfa, 0xc8, 0xdb, 0xfd, 0x66, 0xa3, 0x45, 0x65, 0x26, 0x3d, 0x01, 0xda,
0x18, 0x91, 0x31, 0x4e, 0x22, 0x02, 0x47, 0x35, 0x00, 0xbd, 0x84, 0xe4,
0xba, 0xc6, 0xad, 0x05, 0x10, 0x44, 0x84, 0x26, 0x91, 0x7e, 0x3a, 0x68,
0xfc, 0x30, 0xf5, 0x3e, 0x46, 0xdf, 0x2b, 0x3d, 0xf4, 0x31, 0x32, 0xcc,
0xcb, 0xe4, 0x59, 0xc4, 0x73, 0xe8, 0x90, 0xfb, 0x4f, 0x38, 0x40, 0x24,
0x8f, 0x67, 0x50, 0x2d, 0x43, 0x14, 0xe0, 0xe0, 0x7d, 0xe2, 0x32, 0x83,
0xed, 0x47, 0xb1, 0x9b, 0x58, 0x05, 0x6f, 0x09, 0xc9, 0x62, 0x69, 0x3a,
0x1e, 0x8f, 0x13, 0x31, 0xbd, 0xdd, 0x18, 0x4f, 0x3e, 0x7a, 0x78, 0x0e,
0x54, 0xca, 0x3e, 0x4a, 0xbd, 0x2e, 0xb8, 0x85, 0x7f, 0x3f, 0x63, 0x34,
0x73, 0xcb, 0x54, 0x42, 0x0c, 0xe7, 0x19, 0x0e, 0x16, 0xf9, 0xac, 0x06,
0xaf, 0x81, 0xa7, 0x34, 0x4e, 0xa7, 0xd3, 0x9c, 0x45, 0x4e, 0x9b, 0xcd,
0x9f, 0x36, 0xb9, 0x7f, 0x8b, 0x7d, 0x6d, 0x10, 0x39, 0x67, 0x32, 0x65,
0x8d, 0xe9, 0x8b, 0xaa, 0x27, 0x5f, 0xd3, 0x13, 0x76, 0x5d, 0xd8, 0x2c,
0x97, 0x31, 0x7d, 0xf3, 0xdf, 0x02, 0xee, 0x5b, 0xb5, 0xe4, 0x8b, 0x99,
0x99, 0x7f, 0xfb, 0x5f, 0x8f, 0x18, 0xe3, 0xe3, 0x3f, 0x90, 0xdd, 0xdb,
0xde, 0xf6, 0xb6, 0xb7, 0xfd, 0x97, 0xf6, 0x07, 0x2e, 0xfb, 0x61, 0xc1,
0xcc, 0x44, 0x36, 0x49, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xae, 0x42, 0x60, 0x82
0x08, 0x03, 0x00, 0x00, 0x00, 0x6f, 0x6b, 0x3e, 0xc2, 0x00, 0x00, 0x00,
0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
0x65, 0x3c, 0x00, 0x00, 0x00, 0x5d, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00,
0x00, 0xc7, 0xbe, 0xcf, 0x22, 0x26, 0xa9, 0xc8, 0xce, 0xef, 0xb6, 0xbb,
0xd6, 0xd3, 0xda, 0xfa, 0x93, 0xa2, 0xde, 0xa0, 0xac, 0xe0, 0xb6, 0xc2,
0xf5, 0x7f, 0x87, 0xa7, 0xd5, 0xd9, 0xea, 0xc9, 0xca, 0xce, 0xe1, 0xe2,
0xe6, 0x7b, 0x8e, 0xd4, 0x8d, 0xa1, 0xeb, 0x88, 0x99, 0xd7, 0xa0, 0xb2,
0xf8, 0xa7, 0xac, 0xb9, 0xc0, 0xc0, 0xb1, 0xdd, 0xdd, 0xce, 0xf9, 0xf9,
0xe9, 0xf5, 0xf5, 0xe7, 0xeb, 0xeb, 0xe5, 0x45, 0x44, 0x39, 0xd7, 0xd6,
0xcb, 0x68, 0x67, 0x5d, 0x1f, 0x1d, 0x13, 0x5f, 0x58, 0x3c, 0x40, 0x3a,
0x23, 0x6d, 0x68, 0x55, 0xff, 0xff, 0xff, 0xdd, 0xc0, 0x7f, 0x31, 0x00,
0x00, 0x00, 0x1f, 0x74, 0x52, 0x4e, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x00, 0xcd, 0x19, 0x76, 0x10, 0x00, 0x00, 0x03, 0xff, 0x49, 0x44,
0x41, 0x54, 0x78, 0xda, 0x62, 0x90, 0x43, 0x00, 0x06, 0x08, 0x90, 0xa3,
0x3a, 0x00, 0x08, 0x20, 0x64, 0x23, 0x19, 0x84, 0x84, 0x85, 0x85, 0x85,
0x68, 0x60, 0x09, 0x40, 0x00, 0xa1, 0x58, 0x22, 0x2c, 0x2a, 0x2a, 0x2a,
0x4c, 0x03, 0x4b, 0x00, 0x02, 0x88, 0x2e, 0x96, 0x00, 0x04, 0x10, 0x5d,
0x2c, 0x01, 0x08, 0x20, 0xba, 0x58, 0x02, 0x10, 0x40, 0x74, 0xb1, 0x04,
0x20, 0x80, 0xe8, 0x62, 0x09, 0x40, 0x00, 0xd1, 0xc5, 0x12, 0x80, 0x00,
0x42, 0xb5, 0x44, 0x84, 0x36, 0x96, 0x00, 0x04, 0x10, 0x9a, 0x25, 0x22,
0x22, 0xb4, 0xb0, 0x04, 0x20, 0x80, 0x18, 0x90, 0x0b, 0x14, 0x98, 0x25,
0x0c, 0x0c, 0x88, 0x12, 0x06, 0x99, 0x42, 0x14, 0x3a, 0x48, 0xa2, 0x88,
0xb2, 0x08, 0xc1, 0x66, 0x40, 0x95, 0x00, 0x08, 0x20, 0x88, 0x52, 0x50,
0x79, 0x02, 0x04, 0x22, 0x10, 0x4b, 0x60, 0x5c, 0x50, 0x11, 0x03, 0x62,
0x43, 0x28, 0x21, 0x49, 0x06, 0x49, 0x21, 0x68, 0xa9, 0x03, 0x11, 0x85,
0xeb, 0x83, 0x28, 0x81, 0xf1, 0x84, 0x90, 0xc4, 0x21, 0xea, 0x01, 0x02,
0x88, 0x01, 0xac, 0x43, 0x04, 0x01, 0x84, 0x19, 0xc4, 0x85, 0xe0, 0x6c,
0x21, 0x30, 0x5b, 0x58, 0x5c, 0x4a, 0x5c, 0x18, 0x24, 0x03, 0x54, 0x08,
0x0e, 0x4d, 0x06, 0x88, 0x28, 0x92, 0x3e, 0x61, 0x06, 0x24, 0x53, 0x84,
0x18, 0x90, 0x0c, 0x04, 0xd9, 0x02, 0x10, 0x40, 0x0c, 0xd0, 0xa8, 0x40,
0x52, 0x2e, 0x24, 0x82, 0xac, 0x04, 0x4c, 0x4a, 0x42, 0x02, 0x52, 0x18,
0xa2, 0x89, 0x41, 0x10, 0xcc, 0x10, 0x47, 0x31, 0x0a, 0xac, 0x0b, 0x16,
0x18, 0xc2, 0x28, 0x46, 0xc8, 0x01, 0x04, 0x10, 0x83, 0x1c, 0xd4, 0x50,
0x68, 0x68, 0xc1, 0x54, 0xc0, 0x03, 0x0f, 0xa2, 0x19, 0x84, 0x25, 0x21,
0x1e, 0x60, 0x80, 0x26, 0x10, 0x71, 0xb0, 0x25, 0x10, 0x75, 0xc2, 0x0c,
0x50, 0x07, 0x20, 0xb9, 0x06, 0xa2, 0x0b, 0xac, 0x01, 0x20, 0x80, 0x18,
0x20, 0xb9, 0x43, 0x54, 0x08, 0x18, 0x24, 0x42, 0xa2, 0xe0, 0x7c, 0x82,
0xc2, 0x05, 0xba, 0x57, 0x14, 0x02, 0x84, 0xa4, 0x18, 0xc0, 0x6c, 0xa0,
0xa3, 0x21, 0x12, 0x42, 0x60, 0x52, 0x06, 0x24, 0x28, 0x0c, 0x16, 0x03,
0x85, 0x19, 0xc4, 0x08, 0x88, 0x91, 0x92, 0xc2, 0x10, 0x9e, 0x1c, 0x40,
0x00, 0x41, 0xc5, 0x25, 0xc4, 0x19, 0x18, 0xa4, 0xc4, 0x25, 0x40, 0x2c,
0x06, 0x28, 0x97, 0x01, 0xca, 0x15, 0x82, 0xda, 0x01, 0x12, 0x02, 0xb1,
0x25, 0x24, 0xc1, 0xe2, 0xe2, 0x52, 0x12, 0x50, 0x6d, 0x42, 0x20, 0x55,
0x60, 0x31, 0x49, 0x88, 0x59, 0x42, 0x0c, 0x08, 0x15, 0x20, 0x39, 0x39,
0x80, 0x00, 0x5c, 0x8d, 0x31, 0x02, 0x00, 0x20, 0x08, 0x02, 0x79, 0x43,
0x43, 0x12, 0x43, 0xff, 0x7f, 0x66, 0x22, 0x5b, 0x4e, 0xa0, 0x27, 0x00,
0xdc, 0x3d, 0x54, 0x47, 0xc8, 0x92, 0xf8, 0x6c, 0x05, 0x38, 0x98, 0x5e,
0x4b, 0xfb, 0x35, 0x8f, 0x3c, 0xea, 0x12, 0x53, 0x81, 0xe6, 0x52, 0xc9,
0xa4, 0x94, 0x25, 0xee, 0x13, 0x40, 0x40, 0x01, 0x1e, 0x20, 0xe0, 0x06,
0x9b, 0xca, 0x0d, 0x62, 0x31, 0xa0, 0x71, 0xc5, 0x41, 0x14, 0x0f, 0x8f,
0x10, 0x58, 0x48, 0x88, 0x07, 0x02, 0xb8, 0x81, 0x26, 0x81, 0xd8, 0x42,
0x92, 0x52, 0x20, 0x79, 0x09, 0x06, 0x6e, 0x98, 0x04, 0x50, 0x84, 0x01,
0xcc, 0xe3, 0x96, 0x02, 0x1b, 0x00, 0x34, 0x41, 0x0e, 0x20, 0x80, 0x80,
0x6a, 0xb9, 0x80, 0x80, 0x1b, 0x1c, 0x3e, 0xdc, 0x20, 0x16, 0x03, 0x98,
0x0b, 0x74, 0x21, 0x98, 0x2b, 0x28, 0x2e, 0xc8, 0xc5, 0x05, 0x57, 0x01,
0x51, 0x02, 0x12, 0x06, 0xb1, 0x41, 0x32, 0xdc, 0xdc, 0x10, 0x4d, 0x10,
0x55, 0xdc, 0x82, 0x92, 0x92, 0x82, 0x82, 0xe2, 0x0c, 0x60, 0x31, 0xa0,
0x25, 0x60, 0x31, 0x06, 0x39, 0x80, 0x00, 0x02, 0x46, 0x3c, 0x0b, 0x33,
0x10, 0x08, 0x02, 0x63, 0x5a, 0x10, 0xc4, 0x60, 0x01, 0xf3, 0x05, 0x65,
0x21, 0x5c, 0x16, 0x88, 0x20, 0x44, 0x05, 0xc8, 0x2b, 0x10, 0x2e, 0x0b,
0x38, 0x33, 0x8b, 0xb3, 0xc0, 0xe4, 0xb8, 0x21, 0x6c, 0x16, 0x59, 0x59,
0x41, 0x20, 0x2d, 0x08, 0x36, 0x82, 0x45, 0x4a, 0x8a, 0x05, 0xa2, 0x56,
0x0e, 0x20, 0x80, 0x40, 0xa9, 0x9e, 0x03, 0x04, 0x58, 0x58, 0x58, 0x20,
0x34, 0x84, 0x0f, 0xe5, 0x0a, 0xca, 0x40, 0x38, 0x10, 0x36, 0xd0, 0x60,
0x19, 0x08, 0x13, 0x52, 0x64, 0x08, 0x42, 0xb4, 0x80, 0x34, 0x49, 0x09,
0x22, 0x14, 0x02, 0xdd, 0x09, 0x22, 0x81, 0x96, 0x40, 0x78, 0x72, 0x00,
0x01, 0x04, 0xca, 0x8c, 0x82, 0x1c, 0x48, 0x80, 0x9d, 0x41, 0x1a, 0xca,
0x12, 0x10, 0x10, 0x60, 0x97, 0x66, 0x07, 0x09, 0xc9, 0xc8, 0xb0, 0x43,
0x8c, 0x06, 0x06, 0x22, 0x58, 0x00, 0x56, 0x30, 0xc9, 0x08, 0xb2, 0xb3,
0x43, 0x0c, 0x62, 0x40, 0x32, 0x85, 0x9d, 0x01, 0xac, 0x48, 0x0a, 0xac,
0x16, 0xc8, 0x93, 0x03, 0x08, 0x20, 0x70, 0x29, 0x21, 0x28, 0x00, 0x07,
0xec, 0x82, 0x20, 0x9d, 0x30, 0x8e, 0x34, 0x03, 0x88, 0x29, 0x28, 0x25,
0x05, 0x52, 0xc1, 0xce, 0x09, 0xb6, 0x04, 0x24, 0x80, 0x54, 0x00, 0xca,
0x80, 0xa5, 0xc0, 0xfe, 0x62, 0x87, 0x1b, 0x01, 0x62, 0x81, 0x2c, 0x01,
0x73, 0x19, 0xe4, 0x00, 0x02, 0xd0, 0x40, 0x06, 0x37, 0x00, 0xc0, 0x20,
0x08, 0xfc, 0xd1, 0xb0, 0x82, 0xd2, 0xee, 0x3f, 0x66, 0xa5, 0xd6, 0x97,
0x5c, 0x50, 0x49, 0x78, 0x21, 0x49, 0xb4, 0x0f, 0xa6, 0x22, 0x94, 0x8d,
0xc8, 0x88, 0x92, 0x33, 0xa8, 0x0a, 0x51, 0x59, 0x98, 0xff, 0x74, 0x81,
0x5e, 0x5e, 0xdb, 0xd8, 0x67, 0x76, 0x2d, 0x20, 0x7d, 0x3e, 0x57, 0x00,
0x81, 0x4a, 0x4f, 0x41, 0x56, 0x04, 0x60, 0x04, 0x03, 0x24, 0x26, 0x23,
0x94, 0x05, 0xa6, 0x04, 0x19, 0x38, 0xf9, 0xf8, 0xf8, 0x38, 0x19, 0x80,
0x5c, 0x46, 0x46, 0x20, 0x9b, 0x53, 0x46, 0x4a, 0x06, 0x24, 0xc2, 0xc6,
0x80, 0xd0, 0xc6, 0x8a, 0xd0, 0x0f, 0xa1, 0x18, 0xe4, 0x00, 0x02, 0x88,
0x81, 0x81, 0x89, 0x14, 0xc0, 0xc0, 0x0b, 0x34, 0x12, 0xaa, 0x85, 0x01,
0xc8, 0xe4, 0xe5, 0x05, 0x09, 0x00, 0x2d, 0xc1, 0xa7, 0x87, 0x01, 0x20,
0x80, 0x18, 0x48, 0xb2, 0x85, 0x81, 0x97, 0x9f, 0x9f, 0x9f, 0x17, 0x66,
0x09, 0x3f, 0x1c, 0xf0, 0xe2, 0x35, 0x84, 0x01, 0x20, 0x80, 0x18, 0x90,
0x6b, 0x31, 0xc2, 0x00, 0x64, 0x89, 0x2c, 0x8c, 0xc3, 0x09, 0xb3, 0x83,
0x93, 0x80, 0x2e, 0x80, 0x00, 0x22, 0xad, 0x46, 0x07, 0x99, 0xcb, 0xcb,
0x80, 0xe0, 0xf1, 0x82, 0xbd, 0xc1, 0x49, 0xc8, 0x10, 0x80, 0x00, 0x22,
0xb1, 0xd9, 0x00, 0x34, 0x17, 0xc9, 0x48, 0xa0, 0x67, 0x78, 0x81, 0x7c,
0x82, 0x66, 0x00, 0x04, 0x10, 0xa9, 0x6d, 0x13, 0x29, 0x29, 0x29, 0x39,
0xb4, 0x2e, 0x0d, 0x61, 0x4d, 0x00, 0x01, 0x44, 0x83, 0x06, 0x10, 0x26,
0x00, 0x08, 0x20, 0xba, 0x58, 0x02, 0x10, 0x40, 0x74, 0xb1, 0x04, 0x20,
0x80, 0xe8, 0x62, 0x09, 0x40, 0x00, 0xd1, 0xc5, 0x12, 0x80, 0x00, 0xa2,
0x8b, 0x25, 0x00, 0x01, 0x44, 0x17, 0x4b, 0x00, 0x02, 0x88, 0x2e, 0x96,
0x00, 0x04, 0x10, 0x5d, 0x2c, 0x01, 0x08, 0x20, 0xba, 0x58, 0x02, 0x10,
0x40, 0x74, 0xb1, 0x04, 0x20, 0x80, 0xe8, 0x62, 0x09, 0x40, 0x80, 0x01,
0x00, 0x64, 0x60, 0x82, 0xc9, 0xbd, 0x53, 0xb5, 0x4f, 0x00, 0x00, 0x00,
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
unsigned int doxygen_png_len = 1576;
unsigned int doxygen_png_len = 1281;
unsigned char search_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
......
......@@ -543,7 +543,17 @@ QCString MemberDef::anchor() const
if (groupAlias) return groupAlias->anchor();
if (m_templateMaster) return m_templateMaster->anchor();
if (enumScope) result.prepend(enumScope->anchor());
if (group) result.prepend("g");
if (group)
{
if (groupMember)
{
result=groupMember->anchor();
}
else
{
result.prepend("g");
}
}
return result;
}
......@@ -1184,12 +1194,18 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// name().data(),hasDocs,container->definitionType(),inGroup);
if ( !hasDocs ) return;
QCString scopeName = scName;
QCString memAnchor = anchor();
if (container->definitionType()==TypeGroup)
{
if (getClassDef()) scopeName=getClassDef()->name();
else if (getNamespaceDef()) scopeName=getNamespaceDef()->name();
else if (getFileDef()) scopeName=getFileDef()->name();
}
else if (container->definitionType()==TypeFile && getNamespaceDef())
{ // member is in a namespace, but is written as part of the file documentation
// as well, so we need to make sure its label is unique.
memAnchor.prepend("file_");
}
QCString cname = container->name();
QCString cfname = getOutputFileBase();
......@@ -1200,7 +1216,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"))
{
HtmlHelp *htmlHelp = HtmlHelp::getInstance();
htmlHelp->addIndexItem(cname,name(),cfname,anchor());
htmlHelp->addIndexItem(cname,name(),cfname,memAnchor);
}
// get member name
......@@ -1242,11 +1258,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
if (vmd->isEnumerate() && ldef.mid(i,l)==vmd->name())
{
ol.startDoxyAnchor(cfname,cname,anchor(),doxyName);
ol.startMemberDoc(cname,name(),anchor(),name());
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName);
ol.startMemberDoc(cname,name(),memAnchor,name());
if (hasHtmlHelp)
{
htmlHelp->addIndexItem(cname,name(),cfname,anchor());
htmlHelp->addIndexItem(cname,name(),cfname,memAnchor);
}
linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef.left(i));
vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef());
......@@ -1258,11 +1274,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (!found) // anonymous compound
{
//printf("Anonymous compound `%s'\n",cname.data());
ol.startDoxyAnchor(cfname,cname,anchor(),doxyName);
ol.startMemberDoc(cname,name(),anchor(),name());
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName);
ol.startMemberDoc(cname,name(),memAnchor,name());
if (hasHtmlHelp)
{
htmlHelp->addIndexItem(cname,name(),cfname,anchor());
htmlHelp->addIndexItem(cname,name(),cfname,memAnchor);
}
// strip anonymous compound names from definition
int si=ldef.find(' '),pi,ei=i+l;
......@@ -1280,11 +1296,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
else // not an enum value
{
ol.startDoxyAnchor(cfname,cname,anchor(),doxyName);
ol.startMemberDoc(cname,name(),anchor(),name());
ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName);
ol.startMemberDoc(cname,name(),memAnchor,name());
if (hasHtmlHelp)
{
htmlHelp->addIndexItem(cname,name(),cfname,anchor());
htmlHelp->addIndexItem(cname,name(),cfname,memAnchor);
}
ClassDef *cd=getClassDef();
......@@ -1457,7 +1473,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.endMemberDocName();
ol.endMemberDoc(FALSE);
}
ol.endDoxyAnchor(cfname,anchor());
ol.endDoxyAnchor(cfname,memAnchor);
ol.startIndent();
ol.pushGeneratorState();
......@@ -1872,7 +1888,9 @@ void MemberDef::setAnchor(const char *a)
anc=a;
}
void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,
bool hasDocs,MemberDef *member)
{
//printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
group=gd;
......@@ -1880,6 +1898,7 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString
groupFileName=fileName;
groupStartLine=startLine;
groupHasDocs=hasDocs;
groupMember=member;
}
void MemberDef::setEnumScope(MemberDef *md)
......
......@@ -164,7 +164,9 @@ class MemberDef : public Definition
void setMaxInitLines(int lines) { userInitLines=lines; }
void setMemberClass(ClassDef *cd);
void setSectionList(Definition *d,MemberList *sl);
void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
MemberDef *member=0);
void setExplicitExternal(bool b) { explExt=b; }
void setReadAccessor(const char *r) { read=r; }
void setWriteAccessor(const char *w) { write=w; }
......@@ -360,6 +362,7 @@ class MemberDef : public Definition
QCString groupFileName; // file where this grouping was defined
int groupStartLine; // line " " " " "
bool groupHasDocs; // true if the entry that caused the grouping was documented
MemberDef *groupMember;
MemberDef *m_templateMaster;
SDict<MemberList> *classSectionSDict;
bool docsForDefinition; // TRUE => documentation block is put before
......
......@@ -81,7 +81,9 @@ void MemberGroup::insertMember(MemberDef *md)
GroupDef *gd;
if (firstMd && (gd=firstMd->getGroupDef()))
{
md->setGroupDef(gd, firstMd->getGroupPri(), firstMd->getGroupFileName(), firstMd->getGroupStartLine(), firstMd->getGroupHasDocs());
md->setGroupDef(gd, firstMd->getGroupPri(),
firstMd->getGroupFileName(), firstMd->getGroupStartLine(),
firstMd->getGroupHasDocs());
gd->insertMember(md);
}
}
......
......@@ -2636,7 +2636,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<ReadBody,ReadNSBody,ReadBodyIntf>{BN}+ { current->program += yytext ;
lineCount() ;
}
<ReadBodyIntf>"@end" { // end of Objective C block
<ReadBodyIntf>"@end"/[^a-z_A-Z0-9] { // end of Objective C block
current_root->addSubEntry( current ) ;
current=new Entry;
initEntry();
......@@ -5475,7 +5475,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
unput('\n');
BEGIN( lastInternalDocContext );
}
<AfterDoc>{CMD}"brief" { BEGIN(AfterDocBrief); }
<AfterDoc>{CMD}"brief" { current->brief.resize(0); BEGIN(AfterDocBrief); }
<AfterDoc>"/*"|"//" { current->doc+=yytext; }
<AfterDoc>^{B}*"*"+/[^/]
<AfterDoc>\n { current->doc+=yytext; yyLineNr++; }
......
......@@ -1203,6 +1203,7 @@ static bool findOperator(const QCString &s,int i)
}
static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
QCString removeRedundantWhiteSpace(const QCString &s)
{
......@@ -1211,11 +1212,13 @@ QCString removeRedundantWhiteSpace(const QCString &s)
uint i;
uint l=s.length();
uint csp=0;
uint vsp=0;
for (i=0;i<l;i++)
{
nextChar:
char c=s.at(i);
if (csp<6 && c==constScope[csp]) csp++; else csp=0;
if (vsp<8 && c==virtualScope[vsp]) vsp++; else vsp=0;
if (c=='"') // quoted string
{
i++;
......@@ -1262,9 +1265,13 @@ nextChar:
result+=' ';
result+=s.at(i);
}
else if (c=='t' && csp==5 && !(isId(s.at(i+1)) || s.at(i+1)==' ' || s.at(i+1)==')' || s.at(i+1)==',' || s.at(i+1)=='\0')) // prevent const ::A from being converted to const::A
else if (c=='t' && csp==5 &&
!(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || s.at(i+1)==')' ||
s.at(i+1)==',' || s.at(i+1)=='\0'))
// prevent const ::A from being converted to const::A
{
result+="t ";
if (s.at(i+1)==' ') i++;
csp=0;
}
else if (c==':' && csp==6) // replace const::A by const ::A
......@@ -1272,6 +1279,20 @@ nextChar:
result+=" :";
csp=0;
}
else if (c=='l' && vsp==7 &&
!(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || s.at(i+1)==')' ||
s.at(i+1)==',' || s.at(i+1)=='\0'))
// prevent virtual ::A from being converted to virtual::A
{
result+="l ";
if (s.at(i+1)==' ') i++;
vsp=0;
}
else if (c==':' && vsp==8) // replace virtual::A by virtual ::A
{
result+=" :";
vsp=0;
}
else if (!isspace((uchar)c) ||
( i>0 && i<l-1 &&
(isId(s.at(i-1)) || s.at(i-1)==')' || s.at(i-1)==',' || s.at(i-1)=='>' || s.at(i-1)==']')
......@@ -1399,6 +1420,16 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
found=TRUE;
}
}
else if ((cd=getClass(word+"-p"))) // search for Obj-C protocols as well
{
// add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject())
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),0,word);
found=TRUE;
}
}
if (scope &&
(scope->definitionType()==Definition::TypeClass ||
......@@ -3335,7 +3366,12 @@ bool resolveLink(/* in */ const char *scName,
*resContext=fd;
return TRUE;
}
else if ((cd=getClass(linkRef)))
else if ((cd=getClass(linkRef))) // class link
{
*resContext=cd;
return TRUE;
}
else if ((cd=getClass(linkRef+"-p"))) // Obj-C protocol link
{
*resContext=cd;
return TRUE;
......
......@@ -7,11 +7,13 @@
TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = xlC
TMAKE_CC = xlc
#TMAKE_CC = xlC
TMAKE_CFLAGS = -+ -qstrict -D_BSD
TMAKE_CFLAGS_WARN_ON =
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O3
TMAKE_CFLAGS_RELEASE = -O
#TMAKE_CFLAGS_RELEASE = -O3
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB =
TMAKE_CFLAGS_YACC =
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment