|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <ctype.h>
|
|
Packit |
1c1d7e |
#include <qregexp.h>
|
|
Packit |
1c1d7e |
#include "groupdef.h"
|
|
Packit |
1c1d7e |
#include "classdef.h"
|
|
Packit |
1c1d7e |
#include "filedef.h"
|
|
Packit |
1c1d7e |
#include "classlist.h"
|
|
Packit |
1c1d7e |
#include "outputlist.h"
|
|
Packit |
1c1d7e |
#include "namespacedef.h"
|
|
Packit |
1c1d7e |
#include "language.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "memberlist.h"
|
|
Packit |
1c1d7e |
#include "message.h"
|
|
Packit |
1c1d7e |
#include "membergroup.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "pagedef.h"
|
|
Packit |
1c1d7e |
#include "docparser.h"
|
|
Packit |
1c1d7e |
#include "searchindex.h"
|
|
Packit |
1c1d7e |
#include "dot.h"
|
|
Packit |
1c1d7e |
#include "vhdldocgen.h"
|
|
Packit |
1c1d7e |
#include "layout.h"
|
|
Packit |
1c1d7e |
#include "arguments.h"
|
|
Packit |
1c1d7e |
#include "entry.h"
|
|
Packit |
1c1d7e |
#include "membername.h"
|
|
Packit |
1c1d7e |
#include "dirdef.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//---------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
|
|
Packit |
1c1d7e |
const char *refFileName) : Definition(df,dl,1,na)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fileList = new FileList;
|
|
Packit |
1c1d7e |
classSDict = new ClassSDict(17);
|
|
Packit |
1c1d7e |
groupList = new GroupList;
|
|
Packit |
1c1d7e |
namespaceSDict = new NamespaceSDict(17);
|
|
Packit |
1c1d7e |
pageDict = new PageSDict(17);
|
|
Packit |
1c1d7e |
exampleDict = new PageSDict(17);
|
|
Packit |
1c1d7e |
dirList = new DirList;
|
|
Packit |
1c1d7e |
allMemberNameInfoSDict = new MemberNameInfoSDict(17);
|
|
Packit |
1c1d7e |
allMemberNameInfoSDict->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
if (refFileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fileName=stripExtension(refFileName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fileName = convertNameToFile(QCString("group_")+na);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
setGroupTitle( t );
|
|
Packit |
1c1d7e |
memberGroupSDict = new MemberGroupSDict;
|
|
Packit |
1c1d7e |
memberGroupSDict->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
allMemberList = new MemberList(MemberListType_allMembersList);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
visited = 0;
|
|
Packit |
1c1d7e |
groupScope = 0;
|
|
Packit |
1c1d7e |
m_subGrouping=Config_getBool(SUBGROUPING);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
GroupDef::~GroupDef()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete fileList;
|
|
Packit |
1c1d7e |
delete classSDict;
|
|
Packit |
1c1d7e |
delete groupList;
|
|
Packit |
1c1d7e |
delete namespaceSDict;
|
|
Packit |
1c1d7e |
delete pageDict;
|
|
Packit |
1c1d7e |
delete exampleDict;
|
|
Packit |
1c1d7e |
delete allMemberList;
|
|
Packit |
1c1d7e |
delete allMemberNameInfoSDict;
|
|
Packit |
1c1d7e |
delete memberGroupSDict;
|
|
Packit |
1c1d7e |
delete dirList;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::setGroupTitle( const char *t )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ( t && qstrlen(t) )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
title = t;
|
|
Packit |
1c1d7e |
titleSet = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
title = name();
|
|
Packit |
1c1d7e |
title.at(0)=toupper(title.at(0));
|
|
Packit |
1c1d7e |
titleSet = FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::distributeMemberGroupDocumentation()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->distributeMemberGroupDocumentation();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::findSectionsInDocumentation()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
docFindSections(documentation(),this,0,docFile());
|
|
Packit |
1c1d7e |
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->findSectionsInDocumentation();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->listType()&MemberListType_declarationLists)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ml->findSectionsInDocumentation();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addFile(const FileDef *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
|
|
Packit |
1c1d7e |
if (def->isHidden()) return;
|
|
Packit |
1c1d7e |
updateLanguage(def);
|
|
Packit |
1c1d7e |
if (sortBriefDocs)
|
|
Packit |
1c1d7e |
fileList->inSort(def);
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
fileList->append(def);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::addClass(const ClassDef *cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
|
|
Packit |
1c1d7e |
if (cd->isHidden()) return FALSE;
|
|
Packit |
1c1d7e |
updateLanguage(cd);
|
|
Packit |
1c1d7e |
QCString qn = cd->name();
|
|
Packit |
1c1d7e |
if (classSDict->find(qn)==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs);
|
|
Packit |
1c1d7e |
if (sortBriefDocs)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
classSDict->inSort(qn,cd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int i=qn.findRev("::");
|
|
Packit |
1c1d7e |
if (i==-1) i=qn.find('.');
|
|
Packit |
1c1d7e |
bool found=FALSE;
|
|
Packit |
1c1d7e |
//printf("i=%d\n",i);
|
|
Packit |
1c1d7e |
if (i!=-1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// add nested classes (e.g. A::B, A::C) after their parent (A) in
|
|
Packit |
1c1d7e |
// order of insertion
|
|
Packit |
1c1d7e |
QCString scope = qn.left(i);
|
|
Packit |
1c1d7e |
int j=classSDict->findAt(scope);
|
|
Packit |
1c1d7e |
if (j!=-1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
while (j<(int)classSDict->count() &&
|
|
Packit |
1c1d7e |
classSDict->at(j)->qualifiedName().left(i)==scope)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("skipping over %s\n",classSDict->at(j)->qualifiedName().data());
|
|
Packit |
1c1d7e |
j++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("Found scope at index %d\n",j);
|
|
Packit |
1c1d7e |
classSDict->insertAt(j,qn,cd);
|
|
Packit |
1c1d7e |
found=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (!found) // no insertion point found -> just append
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
classSDict->append(qn,cd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::addNamespace(const NamespaceDef *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
|
|
Packit |
1c1d7e |
if (def->isHidden()) return FALSE;
|
|
Packit |
1c1d7e |
updateLanguage(def);
|
|
Packit |
1c1d7e |
if (namespaceSDict->find(def->name())==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (sortBriefDocs)
|
|
Packit |
1c1d7e |
namespaceSDict->inSort(def->name(),def);
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
namespaceSDict->append(def->name(),def);
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addDir(const DirDef *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (def->isHidden()) return;
|
|
Packit |
1c1d7e |
if (Config_getBool(SORT_BRIEF_DOCS))
|
|
Packit |
1c1d7e |
dirList->inSort(def);
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
dirList->append(def);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addPage(PageDef *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (def->isHidden()) return;
|
|
Packit |
1c1d7e |
//printf("Making page %s part of a group\n",def->name.data());
|
|
Packit |
1c1d7e |
pageDict->append(def->name(),def);
|
|
Packit |
1c1d7e |
def->makePartOfGroup(this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addExample(const PageDef *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (def->isHidden()) return;
|
|
Packit |
1c1d7e |
exampleDict->append(def->name(),def);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addMembersToMemberGroup()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->listType()&MemberListType_declarationLists)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
::addMembersToMemberGroup(ml,&memberGroupSDict,this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
|
|
Packit |
1c1d7e |
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->setInGroup(TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::insertMember(MemberDef *md,bool docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isHidden()) return FALSE;
|
|
Packit |
1c1d7e |
updateLanguage(md);
|
|
Packit |
1c1d7e |
//printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
|
|
Packit |
1c1d7e |
MemberNameInfo *mni=0;
|
|
Packit |
1c1d7e |
if ((mni=(*allMemberNameInfoSDict)[md->name()]))
|
|
Packit |
1c1d7e |
{ // member with this name already found
|
|
Packit |
1c1d7e |
MemberNameInfoIterator srcMnii(*mni);
|
|
Packit |
1c1d7e |
MemberInfo *srcMi;
|
|
Packit |
1c1d7e |
for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberDef *srcMd = srcMi->memberDef;
|
|
Packit |
1c1d7e |
if (srcMd==md) return FALSE; // already added before!
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace
|
|
Packit |
1c1d7e |
// both inside a file => definition and declaration do not have to be in the same file
|
|
Packit |
1c1d7e |
(srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
|
|
Packit |
1c1d7e |
md->getOuterScope()->definitionType()==Definition::TypeFile);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ArgumentList *srcMdAl = srcMd->argumentList();
|
|
Packit |
1c1d7e |
ArgumentList *mdAl = md->argumentList();
|
|
Packit |
1c1d7e |
ArgumentList *tSrcMdAl = srcMd->templateArguments();
|
|
Packit |
1c1d7e |
ArgumentList *tMdAl = md->templateArguments();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (srcMd->isFunction() && md->isFunction() && // both are a function
|
|
Packit |
1c1d7e |
((tSrcMdAl==0 && tMdAl==0) ||
|
|
Packit |
1c1d7e |
(tSrcMdAl!=0 && tMdAl!=0 && tSrcMdAl->count()==tMdAl->count())
|
|
Packit |
1c1d7e |
) && // same number of template arguments
|
|
Packit |
1c1d7e |
matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl,
|
|
Packit |
1c1d7e |
md->getOuterScope(),md->getFileDef(),mdAl,
|
|
Packit |
1c1d7e |
TRUE
|
|
Packit |
1c1d7e |
) && // matching parameters
|
|
Packit |
1c1d7e |
sameScope // both are found in the same scope
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (srcMd->getGroupAlias()==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->setGroupAlias(srcMd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (md!=srcMd->getGroupAlias())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->setGroupAlias(srcMd->getGroupAlias());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE; // member is the same as one that is already added
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mni = new MemberNameInfo(md->name());
|
|
Packit |
1c1d7e |
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
|
|
Packit |
1c1d7e |
allMemberNameInfoSDict->append(mni->memberName(),mni);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("Added member!\n");
|
|
Packit |
1c1d7e |
allMemberList->append(md);
|
|
Packit |
1c1d7e |
switch(md->memberType())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberType_Variable:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decVarMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docVarMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Function:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decFuncMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docFuncMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Typedef:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decTypedefMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docTypedefMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Enumeration:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decEnumMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docEnumMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_EnumValue:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decEnumValMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docEnumValMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Define:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decDefineMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docDefineMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Signal:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decSignalMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docSignalMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Slot:
|
|
Packit |
1c1d7e |
if (md->protection()==Public)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decPubSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docPubSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (md->protection()==Protected)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decProSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docProSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decPriSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docPriSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Event:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decEventMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docEventMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Property:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decPropMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docPropMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Friend:
|
|
Packit |
1c1d7e |
if (!docOnly)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_decFriendMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
addMemberToList(MemberListType_docFriendMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
default:
|
|
Packit |
1c1d7e |
err("GroupDef::insertMembers(): "
|
|
Packit |
1c1d7e |
"member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n",
|
|
Packit |
1c1d7e |
md->name().data(),md->memberType(),
|
|
Packit |
1c1d7e |
md->getClassDef() ? md->getClassDef()->name().data() : "",
|
|
Packit |
1c1d7e |
name().data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::removeMember(MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());
|
|
Packit |
1c1d7e |
MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name());
|
|
Packit |
1c1d7e |
if (mni)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberNameInfoIterator mnii(*mni);
|
|
Packit |
1c1d7e |
while( mnii.current() )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if( mnii.current()->memberDef == md )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mni->remove(mnii.current());
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
++mnii;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if( mni->isEmpty() )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
allMemberNameInfoSDict->remove(md->name());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_allMembersList,md);
|
|
Packit |
1c1d7e |
switch(md->memberType())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberType_Variable:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decVarMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docVarMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Function:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decFuncMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docFuncMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Typedef:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decTypedefMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docTypedefMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Enumeration:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decEnumMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docEnumMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_EnumValue:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decEnumValMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docEnumValMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Define:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decDefineMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docDefineMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Signal:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decSignalMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docSignalMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Slot:
|
|
Packit |
1c1d7e |
if (md->protection()==Public)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decPubSlotMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docPubSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (md->protection()==Protected)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decProSlotMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docProSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decPriSlotMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docPriSlotMembers,md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Event:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decEventMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docEventMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Property:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decPropMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docPropMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Friend:
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_decFriendMembers,md);
|
|
Packit |
1c1d7e |
removeMemberFromList(MemberListType_docFriendMembers,md);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
default:
|
|
Packit |
1c1d7e |
err("GroupDef::removeMember(): unexpected member remove in file!\n");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::findGroup(const GroupDef *def) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (this==def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (groupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupListIterator it(*groupList);
|
|
Packit |
1c1d7e |
GroupDef *gd;
|
|
Packit |
1c1d7e |
for (;(gd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd->findGroup(def))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addGroup(const GroupDef *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
|
|
Packit |
1c1d7e |
//if (Config_getBool(SORT_MEMBER_DOCS))
|
|
Packit |
1c1d7e |
// groupList->inSort(def);
|
|
Packit |
1c1d7e |
//else
|
|
Packit |
1c1d7e |
groupList->append(def);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::isASubGroup() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupList *groups = partOfGroups();
|
|
Packit |
1c1d7e |
return groups!=0 && groups->count()!=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int GroupDef::countMembers() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return fileList->count()+
|
|
Packit |
1c1d7e |
classSDict->count()+
|
|
Packit |
1c1d7e |
namespaceSDict->count()+
|
|
Packit |
1c1d7e |
groupList->count()+
|
|
Packit |
1c1d7e |
allMemberList->count()+
|
|
Packit |
1c1d7e |
pageDict->count()+
|
|
Packit |
1c1d7e |
exampleDict->count();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Compute the HTML anchor names for all members in the group */
|
|
Packit |
1c1d7e |
void GroupDef::computeAnchors()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("GroupDef::computeAnchors()\n");
|
|
Packit |
1c1d7e |
setAnchors(allMemberList);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeTagFile(FTextStream &tagFile)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <compound kind=\"group\">" << endl;
|
|
Packit |
1c1d7e |
tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
|
|
Packit |
1c1d7e |
tagFile << " <title>" << convertToXML(title) << "</title>" << endl;
|
|
Packit |
1c1d7e |
tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
|
|
Packit |
1c1d7e |
QListIterator<LayoutDocEntry> eli(
|
|
Packit |
1c1d7e |
LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
|
|
Packit |
1c1d7e |
LayoutDocEntry *lde;
|
|
Packit |
1c1d7e |
for (eli.toFirst();(lde=eli.current());++eli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch (lde->kind())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupClasses:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (classSDict)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
SDict<ClassDef>::Iterator ci(*classSDict);
|
|
Packit |
1c1d7e |
ClassDef *cd;
|
|
Packit |
1c1d7e |
for (ci.toFirst();(cd=ci.current());++ci)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (cd->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <class kind=\"" << cd->compoundTypeString()
|
|
Packit |
1c1d7e |
<< "\">" << convertToXML(cd->name()) << "</class>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupNamespaces:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (namespaceSDict)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
SDict<NamespaceDef>::Iterator ni(*namespaceSDict);
|
|
Packit |
1c1d7e |
NamespaceDef *nd;
|
|
Packit |
1c1d7e |
for (ni.toFirst();(nd=ni.current());++ni)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (nd->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <namespace>" << convertToXML(nd->name())
|
|
Packit |
1c1d7e |
<< "</namespace>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupFiles:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (fileList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<FileDef> it(*fileList);
|
|
Packit |
1c1d7e |
FileDef *fd;
|
|
Packit |
1c1d7e |
for (;(fd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (fd->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupPageDocs:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (pageDict)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
PageSDict::Iterator pdi(*pageDict);
|
|
Packit |
1c1d7e |
PageDef *pd=0;
|
|
Packit |
1c1d7e |
for (pdi.toFirst();(pd=pdi.current());++pdi)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString pageName = pd->getOutputFileBase();
|
|
Packit |
1c1d7e |
if (pd->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <page>" << convertToXML(pageName) << "</page>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupDirs:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (dirList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<DirDef> it(*dirList);
|
|
Packit |
1c1d7e |
DirDef *dd;
|
|
Packit |
1c1d7e |
for (;(dd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (dd->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupNestedGroups:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (groupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<GroupDef> it(*groupList);
|
|
Packit |
1c1d7e |
GroupDef *gd;
|
|
Packit |
1c1d7e |
for (;(gd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd->isVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDecl:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
|
|
Packit |
1c1d7e |
MemberList * ml = getMemberList(lmd->type);
|
|
Packit |
1c1d7e |
if (ml)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ml->writeTagFile(tagFile);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberGroups:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (memberGroupSDict)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->writeTagFile(tagFile);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
default:
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
writeDocAnchorsToTagFile(tagFile);
|
|
Packit |
1c1d7e |
tagFile << " </compound>" << endl;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
|
|
Packit |
1c1d7e |
|| !documentation().isEmpty() || !inbodyDocumentation().isEmpty()
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
if (pageDict->count()!=countMembers()) // not only pages -> classical layout
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
ol.writeRuler();
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
ol.writeAnchor(0,"details");
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Man); // always print title for man page
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startGroupHeader();
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
ol.endGroupHeader();
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// repeat brief description
|
|
Packit |
1c1d7e |
if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
// write separator between brief and details
|
|
Packit |
1c1d7e |
if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) &&
|
|
Packit |
1c1d7e |
!documentation().isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::RTF);
|
|
Packit |
1c1d7e |
// ol.newParagraph(); // FIXME:PARA
|
|
Packit |
1c1d7e |
ol.enableAll();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.enable(OutputGenerator::Latex);
|
|
Packit |
1c1d7e |
ol.writeString("\n\n");
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// write detailed documentation
|
|
Packit |
1c1d7e |
if (!documentation().isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// write inbody documentation
|
|
Packit |
1c1d7e |
if (!inbodyDocumentation().isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.generateDoc(inbodyFile(),inbodyLine(),this,0,inbodyDocumentation()+"\n",TRUE,FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeBriefDescription(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (hasBriefDescription())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
|
|
Packit |
1c1d7e |
briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
|
|
Packit |
1c1d7e |
if (rootNode && !rootNode->isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startParagraph();
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.writeString(" - ");
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
ol.writeDoc(rootNode,this,0);
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::RTF);
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
ol.enable(OutputGenerator::RTF);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (Config_getBool(REPEAT_BRIEF) ||
|
|
Packit |
1c1d7e |
!documentation().isEmpty()
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
ol.startTextLink(0,"details");
|
|
Packit |
1c1d7e |
ol.parseText(theTranslator->trMore());
|
|
Packit |
1c1d7e |
ol.endTextLink();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
ol.endParagraph();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
delete rootNode;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.writeSynopsis();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeGroupGraph(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (Config_getBool(HAVE_DOT) /*&& Config_getBool(GROUP_GRAPHS)*/ )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
DotGroupCollaboration graph(this);
|
|
Packit |
1c1d7e |
if (!graph.isTrivial())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
msg("Generating dependency graph for group %s\n",qualifiedName().data());
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
//ol.startParagraph();
|
|
Packit |
1c1d7e |
ol.startGroupCollaboration();
|
|
Packit |
1c1d7e |
ol.parseText(theTranslator->trCollaborationDiagram(title));
|
|
Packit |
1c1d7e |
ol.endGroupCollaboration(graph);
|
|
Packit |
1c1d7e |
//ol.endParagraph();
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeFiles(OutputList &ol,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// write list of files
|
|
Packit |
1c1d7e |
if (fileList->count()>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberHeader("files");
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
ol.endMemberHeader();
|
|
Packit |
1c1d7e |
ol.startMemberList();
|
|
Packit |
1c1d7e |
QListIterator<FileDef> it(*fileList);
|
|
Packit |
1c1d7e |
FileDef *fd;
|
|
Packit |
1c1d7e |
for (;(fd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!fd->hasDocumentation()) continue;
|
|
Packit |
1c1d7e |
ol.startMemberDeclaration();
|
|
Packit |
1c1d7e |
ol.startMemberItem(fd->getOutputFileBase(),0);
|
|
Packit |
1c1d7e |
ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
|
|
Packit |
1c1d7e |
ol.insertMemberAlign();
|
|
Packit |
1c1d7e |
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
|
|
Packit |
1c1d7e |
ol.endMemberItem();
|
|
Packit |
1c1d7e |
if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberDescription(fd->getOutputFileBase());
|
|
Packit |
1c1d7e |
ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
|
|
Packit |
1c1d7e |
ol.endMemberDescription();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDeclaration(0,0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberList();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeNamespaces(OutputList &ol,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// write list of namespaces
|
|
Packit |
1c1d7e |
namespaceSDict->writeDeclaration(ol,title);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// write list of groups
|
|
Packit |
1c1d7e |
int count=0;
|
|
Packit |
1c1d7e |
if (groupList->count()>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<GroupDef> it(*groupList);
|
|
Packit |
1c1d7e |
GroupDef *gd;
|
|
Packit |
1c1d7e |
for (;(gd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd->isVisible()) count++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (count>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberHeader("groups");
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
ol.endMemberHeader();
|
|
Packit |
1c1d7e |
ol.startMemberList();
|
|
Packit |
1c1d7e |
if (Config_getBool(SORT_GROUP_NAMES))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
groupList->sort();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QListIterator<GroupDef> it(*groupList);
|
|
Packit |
1c1d7e |
GroupDef *gd;
|
|
Packit |
1c1d7e |
for (;(gd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd->isVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!gd->hasDocumentation()) continue;
|
|
Packit |
1c1d7e |
ol.startMemberDeclaration();
|
|
Packit |
1c1d7e |
ol.startMemberItem(gd->getOutputFileBase(),0);
|
|
Packit |
1c1d7e |
//ol.docify(theTranslator->trGroup(FALSE,TRUE));
|
|
Packit |
1c1d7e |
//ol.docify(" ");
|
|
Packit |
1c1d7e |
ol.insertMemberAlign();
|
|
Packit |
1c1d7e |
ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle());
|
|
Packit |
1c1d7e |
ol.endMemberItem();
|
|
Packit |
1c1d7e |
if (!gd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberDescription(gd->getOutputFileBase());
|
|
Packit |
1c1d7e |
ol.generateDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
|
|
Packit |
1c1d7e |
ol.endMemberDescription();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDeclaration(0,0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberList();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeDirs(OutputList &ol,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// write list of directories
|
|
Packit |
1c1d7e |
if (dirList->count()>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberHeader("dirs");
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
ol.endMemberHeader();
|
|
Packit |
1c1d7e |
ol.startMemberList();
|
|
Packit |
1c1d7e |
QListIterator<DirDef> it(*dirList);
|
|
Packit |
1c1d7e |
DirDef *dd;
|
|
Packit |
1c1d7e |
for (;(dd=it.current());++it)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!dd->hasDocumentation()) continue;
|
|
Packit |
1c1d7e |
ol.startMemberDeclaration();
|
|
Packit |
1c1d7e |
ol.startMemberItem(dd->getOutputFileBase(),0);
|
|
Packit |
1c1d7e |
ol.parseText(theTranslator->trDir(FALSE,TRUE));
|
|
Packit |
1c1d7e |
ol.insertMemberAlign();
|
|
Packit |
1c1d7e |
ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
|
|
Packit |
1c1d7e |
ol.endMemberItem();
|
|
Packit |
1c1d7e |
if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberDescription(dd->getOutputFileBase());
|
|
Packit |
1c1d7e |
ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
|
|
Packit |
1c1d7e |
ol.endMemberDescription();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDeclaration(0,0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.endMemberList();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeClasses(OutputList &ol,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// write list of classes
|
|
Packit |
1c1d7e |
classSDict->writeDeclaration(ol,0,title,FALSE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeInlineClasses(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
classSDict->writeDocumentation(ol);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writePageDocumentation(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
PageDef *pd=0;
|
|
Packit |
1c1d7e |
PageSDict::Iterator pdi(*pageDict);
|
|
Packit |
1c1d7e |
for (pdi.toFirst();(pd=pdi.current());++pdi)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!pd->isReference())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
SectionInfo *si=0;
|
|
Packit |
1c1d7e |
if (!pd->title().isEmpty() && !pd->name().isEmpty() &&
|
|
Packit |
1c1d7e |
(si=Doxygen::sectionDict->find(pd->name()))!=0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startSection(si->label,si->title,SectionInfo::Subsection);
|
|
Packit |
1c1d7e |
ol.docify(si->title);
|
|
Packit |
1c1d7e |
ol.endSection(si->label,SectionInfo::Subsection);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startTextBlock();
|
|
Packit |
1c1d7e |
ol.generateDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
|
|
Packit |
1c1d7e |
ol.endTextBlock();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeMemberGroups(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
/* write user defined member groups */
|
|
Packit |
1c1d7e |
if (memberGroupSDict)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
memberGroupSDict->sort();
|
|
Packit |
1c1d7e |
/* write user defined member groups */
|
|
Packit |
1c1d7e |
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->writeDeclarations(ol,0,0,0,this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::startMemberDeclarations(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberSections();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::endMemberDeclarations(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.endMemberSections();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::startMemberDocumentation(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("** GroupDef::startMemberDocumentation()\n");
|
|
Packit |
1c1d7e |
if (Config_getBool(SEPARATE_MEMBER_PAGES))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
Doxygen::suppressDocWarnings = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::endMemberDocumentation(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("** GroupDef::endMemberDocumentation()\n");
|
|
Packit |
1c1d7e |
if (Config_getBool(SEPARATE_MEMBER_PAGES))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
Doxygen::suppressDocWarnings = FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeAuthorSection(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// write Author section (Man only)
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.startGroupHeader();
|
|
Packit |
1c1d7e |
ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
|
|
Packit |
1c1d7e |
ol.endGroupHeader();
|
|
Packit |
1c1d7e |
ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME)));
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeSummaryLinks(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
QListIterator<LayoutDocEntry> eli(
|
|
Packit |
1c1d7e |
LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
|
|
Packit |
1c1d7e |
LayoutDocEntry *lde;
|
|
Packit |
1c1d7e |
bool first=TRUE;
|
|
Packit |
1c1d7e |
SrcLangExt lang = getLanguage();
|
|
Packit |
1c1d7e |
for (eli.toFirst();(lde=eli.current());++eli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if ((lde->kind()==LayoutDocEntry::GroupClasses && classSDict->declVisible()) ||
|
|
Packit |
1c1d7e |
(lde->kind()==LayoutDocEntry::GroupNamespaces && namespaceSDict->declVisible()) ||
|
|
Packit |
1c1d7e |
(lde->kind()==LayoutDocEntry::GroupFiles && fileList->count()>0) ||
|
|
Packit |
1c1d7e |
(lde->kind()==LayoutDocEntry::GroupNestedGroups && groupList->count()>0) ||
|
|
Packit |
1c1d7e |
(lde->kind()==LayoutDocEntry::GroupDirs && dirList->count()>0)
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
QCString label = lde->kind()==LayoutDocEntry::GroupClasses ? "nested-classes" :
|
|
Packit |
1c1d7e |
lde->kind()==LayoutDocEntry::GroupNamespaces ? "namespaces" :
|
|
Packit |
1c1d7e |
lde->kind()==LayoutDocEntry::GroupFiles ? "files" :
|
|
Packit |
1c1d7e |
lde->kind()==LayoutDocEntry::GroupNestedGroups ? "groups" :
|
|
Packit |
1c1d7e |
"dirs";
|
|
Packit |
1c1d7e |
ol.writeSummaryLink(0,label,ls->title(lang),first);
|
|
Packit |
1c1d7e |
first=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (lde->kind()==LayoutDocEntry::MemberDecl)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
|
|
Packit |
1c1d7e |
MemberList * ml = getMemberList(lmd->type);
|
|
Packit |
1c1d7e |
if (ml && ml->declVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
|
|
Packit |
1c1d7e |
first=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (!first)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeDocumentation(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
startFile(ol,getOutputFileBase(),name(),title,HLI_Modules);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.startHeaderSection();
|
|
Packit |
1c1d7e |
writeSummaryLinks(ol);
|
|
Packit |
1c1d7e |
ol.startTitleHead(getOutputFileBase());
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
addGroupListToTitle(ol,this);
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.endTitleHead(getOutputFileBase(),title);
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Man);
|
|
Packit |
1c1d7e |
ol.endTitleHead(getOutputFileBase(),name());
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
ol.endHeaderSection();
|
|
Packit |
1c1d7e |
ol.startContents();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (Doxygen::searchIndex)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->setCurrentDoc(this,anchor(),FALSE);
|
|
Packit |
1c1d7e |
static QRegExp we("[a-zA-Z_][-a-zA-Z_0-9]*");
|
|
Packit |
1c1d7e |
int i=0,p=0,l=0;
|
|
Packit |
1c1d7e |
while ((i=we.match(title,p,&l))!=-1) // foreach word in the title
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
Doxygen::searchIndex->addWord(title.mid(i,l),TRUE);
|
|
Packit |
1c1d7e |
p=i+l;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
Doxygen::indexList->addIndexItem(this,0,0,title);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//---------------------------------------- start flexible part -------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
SrcLangExt lang=getLanguage();
|
|
Packit |
1c1d7e |
QListIterator<LayoutDocEntry> eli(
|
|
Packit |
1c1d7e |
LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
|
|
Packit |
1c1d7e |
LayoutDocEntry *lde;
|
|
Packit |
1c1d7e |
for (eli.toFirst();(lde=eli.current());++eli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch (lde->kind())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case LayoutDocEntry::BriefDesc:
|
|
Packit |
1c1d7e |
writeBriefDescription(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDeclStart:
|
|
Packit |
1c1d7e |
startMemberDeclarations(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupClasses:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
writeClasses(ol,ls->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupInlineClasses:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeInlineClasses(ol);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupNamespaces:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
writeNamespaces(ol,ls->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberGroups:
|
|
Packit |
1c1d7e |
writeMemberGroups(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDecl:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
|
|
Packit |
1c1d7e |
writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDeclEnd:
|
|
Packit |
1c1d7e |
endMemberDeclarations(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::DetailedDesc:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
writeDetailedDescription(ol,ls->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDefStart:
|
|
Packit |
1c1d7e |
startMemberDocumentation(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDef:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
|
|
Packit |
1c1d7e |
writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::MemberDefEnd:
|
|
Packit |
1c1d7e |
endMemberDocumentation(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupNestedGroups:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
writeNestedGroups(ol,ls->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupPageDocs:
|
|
Packit |
1c1d7e |
writePageDocumentation(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupDirs:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
writeDirs(ol,ls->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupFiles:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
|
|
Packit |
1c1d7e |
writeFiles(ol,ls->title(lang));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::GroupGraph:
|
|
Packit |
1c1d7e |
writeGroupGraph(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::AuthorSection:
|
|
Packit |
1c1d7e |
writeAuthorSection(ol);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassIncludes:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassInheritanceGraph:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassNestedClasses:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassCollaborationGraph:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassAllMembersLink:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassUsedFiles:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::ClassInlineClasses:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::NamespaceNestedNamespaces:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::NamespaceNestedConstantGroups:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::NamespaceClasses:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::NamespaceInlineClasses:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileClasses:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileNamespaces:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileConstantGroups:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileIncludes:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileIncludeGraph:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileIncludedByGraph:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileSourceLink:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::FileInlineClasses:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::DirSubDirs:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::DirFiles:
|
|
Packit |
1c1d7e |
case LayoutDocEntry::DirGraph:
|
|
Packit |
1c1d7e |
err("Internal inconsistency: member %d should not be part of "
|
|
Packit |
1c1d7e |
"LayoutDocManager::Group entry list\n",lde->kind());
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//---------------------------------------- end flexible part -------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
endFile(ol);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (Config_getBool(SEPARATE_MEMBER_PAGES))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
allMemberList->sort();
|
|
Packit |
1c1d7e |
writeMemberPages(ol);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeMemberPages(OutputList &ol)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->listType()&MemberListType_documentationLists)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ml->writeDocumentationPage(ol,name(),this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberListIterator mli(*allMemberList);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(md=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->getGroupDef()==this && md->isLinkable() && !md->isEnumValue())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeString(" ");
|
|
Packit |
1c1d7e |
if (md->isLinkableInProject())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md==currentMd) // selected item => highlight
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeString("
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeString("
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.writeString("href=\"");
|
|
Packit |
1c1d7e |
if (createSubDirs) ol.writeString("../../");
|
|
Packit |
1c1d7e |
ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
|
|
Packit |
1c1d7e |
ol.writeString("\">");
|
|
Packit |
1c1d7e |
ol.writeString(convertToHtml(md->localName()));
|
|
Packit |
1c1d7e |
ol.writeString("");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.writeString("\n");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//---- helper functions ------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addClassToGroups(Entry *root,ClassDef *cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*root->groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *gd=0;
|
|
Packit |
1c1d7e |
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd->addClass(cd))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd->makePartOfGroup(gd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("Compound %s: in group %s\n",cd->name().data(),gd->groupTitle());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("root->groups->count()=%d\n",root->groups->count());
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*root->groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *gd=0;
|
|
Packit |
1c1d7e |
//printf("group `%s'\n",s->data());
|
|
Packit |
1c1d7e |
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd->addNamespace(nd)) nd->makePartOfGroup(gd);
|
|
Packit |
1c1d7e |
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addDirToGroups(Entry *root,DirDef *dd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("*** root->groups->count()=%d\n",root->groups->count());
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*root->groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *gd=0;
|
|
Packit |
1c1d7e |
//printf("group `%s'\n",g->groupname.data());
|
|
Packit |
1c1d7e |
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
gd->addDir(dd);
|
|
Packit |
1c1d7e |
dd->makePartOfGroup(gd);
|
|
Packit |
1c1d7e |
//printf("Dir %s: in group %s\n",dd->name().data(),g->groupname.data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addGroupToGroups(Entry *root,GroupDef *subGroup)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("addGroupToGroups for %s groups=%d\n",root->name.data(),
|
|
Packit |
1c1d7e |
// root->groups?root->groups->count():-1);
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*root->groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *gd=0;
|
|
Packit |
1c1d7e |
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (gd==subGroup)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
warn(root->fileName,root->startLine,"Refusing to add group %s to itself",
|
|
Packit |
1c1d7e |
gd->name().data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (subGroup->findGroup(gd))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
warn(root->fileName,root->startLine,"Refusing to add group %s to group %s, since the latter is already a "
|
|
Packit |
1c1d7e |
"subgroup of the former\n", subGroup->name().data(),gd->name().data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (!gd->findGroup(subGroup))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
gd->addGroup(subGroup);
|
|
Packit |
1c1d7e |
subGroup->makePartOfGroup(gd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Add a member to the group with the highest priority */
|
|
Packit |
1c1d7e |
void addMemberToGroups(Entry *root,MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%d\n",
|
|
Packit |
1c1d7e |
// root, root->name.data(), md, md->name().data(), root->groups->count() );
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*root->groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// Search entry's group list for group with highest pri.
|
|
Packit |
1c1d7e |
Grouping::GroupPri_t pri = Grouping::GROUPING_LOWEST;
|
|
Packit |
1c1d7e |
GroupDef *fgd=0;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *gd=0;
|
|
Packit |
1c1d7e |
if (!g->groupname.isEmpty() &&
|
|
Packit |
1c1d7e |
(gd=Doxygen::groupSDict->find(g->groupname)) &&
|
|
Packit |
1c1d7e |
g->pri >= pri)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (fgd && gd!=fgd && g->pri==pri)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
warn(root->fileName.data(), root->startLine,
|
|
Packit |
1c1d7e |
"Member %s found in multiple %s groups! "
|
|
Packit |
1c1d7e |
"The member will be put in group %s, and not in group %s",
|
|
Packit |
1c1d7e |
md->name().data(), Grouping::getGroupPriName( pri ),
|
|
Packit |
1c1d7e |
gd->name().data(), fgd->name().data()
|
|
Packit |
1c1d7e |
);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
fgd = gd;
|
|
Packit |
1c1d7e |
pri = g->pri;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("fgd=%p\n",fgd);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// put member into group defined by this entry?
|
|
Packit |
1c1d7e |
if (fgd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *mgd = md->getGroupDef();
|
|
Packit |
1c1d7e |
//printf("mgd=%p\n",mgd);
|
|
Packit |
1c1d7e |
bool insertit = FALSE;
|
|
Packit |
1c1d7e |
if (mgd==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
insertit = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (mgd!=fgd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
bool moveit = FALSE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// move member from one group to another if
|
|
Packit |
1c1d7e |
// - the new one has a higher priority
|
|
Packit |
1c1d7e |
// - the new entry has the same priority, but with docs where the old one had no docs
|
|
Packit |
1c1d7e |
if (md->getGroupPri()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
moveit = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->getGroupPri()==pri)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!root->doc.isEmpty() && !md->getGroupHasDocs())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
moveit = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (!root->doc.isEmpty() && md->getGroupHasDocs())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
warn(md->getGroupFileName(),md->getGroupStartLine(),
|
|
Packit |
1c1d7e |
"Member documentation for %s found several times in %s groups!\n"
|
|
Packit |
1c1d7e |
"%s:%d: The member will remain in group %s, and won't be put into group %s",
|
|
Packit |
1c1d7e |
md->name().data(), Grouping::getGroupPriName( pri ),
|
|
Packit |
1c1d7e |
root->fileName.data(), root->startLine,
|
|
Packit |
1c1d7e |
mgd->name().data(),
|
|
Packit |
1c1d7e |
fgd->name().data()
|
|
Packit |
1c1d7e |
);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (moveit)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("removeMember\n");
|
|
Packit |
1c1d7e |
mgd->removeMember(md);
|
|
Packit |
1c1d7e |
insertit = TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (insertit)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("insertMember found at %s line %d: %s: related %s\n",
|
|
Packit |
1c1d7e |
// md->getDefFileName().data(),md->getDefLine(),
|
|
Packit |
1c1d7e |
// md->name().data(),root->relates.data());
|
|
Packit |
1c1d7e |
bool success = fgd->insertMember(md);
|
|
Packit |
1c1d7e |
if (success)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("insertMember successful\n");
|
|
Packit |
1c1d7e |
md->setGroupDef(fgd,pri,root->fileName,root->startLine,
|
|
Packit |
1c1d7e |
!root->doc.isEmpty());
|
|
Packit |
1c1d7e |
ClassDef *cd = md->getClassDefOfAnonymousType();
|
|
Packit |
1c1d7e |
if (cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addExampleToGroups(Entry *root,PageDef *eg)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<Grouping> gli(*root->groups);
|
|
Packit |
1c1d7e |
Grouping *g;
|
|
Packit |
1c1d7e |
for (;(g=gli.current());++gli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GroupDef *gd=0;
|
|
Packit |
1c1d7e |
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
gd->addExample(eg);
|
|
Packit |
1c1d7e |
eg->makePartOfGroup(gd);
|
|
Packit |
1c1d7e |
//printf("Example %s: in group %s\n",eg->name().data(),s->data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString GroupDef::getOutputFileBase() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return fileName;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addListReferences()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QList<ListItemInfo> *xrefItems = xrefListItems();
|
|
Packit |
1c1d7e |
addRefItem(xrefItems,
|
|
Packit |
1c1d7e |
getOutputFileBase(),
|
|
Packit |
1c1d7e |
theTranslator->trGroup(TRUE,TRUE),
|
|
Packit |
1c1d7e |
getOutputFileBase(),name(),
|
|
Packit |
1c1d7e |
0,
|
|
Packit |
1c1d7e |
0
|
|
Packit |
1c1d7e |
);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->addListReferences(this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->listType()&MemberListType_documentationLists)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ml->addListReferences(this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList *GroupDef::createMemberList(MemberListType lt)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_memberLists.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->listType()==lt)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return ml;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
// not found, create a new member list
|
|
Packit |
1c1d7e |
ml = new MemberList(lt);
|
|
Packit |
1c1d7e |
m_memberLists.append(ml);
|
|
Packit |
1c1d7e |
ml->setInGroup(TRUE);
|
|
Packit |
1c1d7e |
return ml;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::addMemberToList(MemberListType lt,MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
|
|
Packit |
1c1d7e |
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
|
|
Packit |
1c1d7e |
MemberList *ml = createMemberList(lt);
|
|
Packit |
1c1d7e |
ml->setNeedsSorting(
|
|
Packit |
1c1d7e |
((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) ||
|
|
Packit |
1c1d7e |
((ml->listType()&MemberListType_documentationLists) && sortMemberDocs));
|
|
Packit |
1c1d7e |
ml->append(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::sortMemberLists()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (;(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList *GroupDef::getMemberList(MemberListType lt) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QListIterator<MemberList> mli(m_memberLists);
|
|
Packit |
1c1d7e |
MemberList *ml;
|
|
Packit |
1c1d7e |
for (;(ml=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (ml->listType()==lt)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return ml;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList * ml = getMemberList(lt);
|
|
Packit |
1c1d7e |
if (optimizeVhdl && ml)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0,0,0);
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (ml)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ml->writeDeclarations(ol,0,0,0,this,title,0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberList * ml = getMemberList(lt);
|
|
Packit |
1c1d7e |
if (ml) ml->writeDocumentation(ol,name(),this,title);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::removeMemberFromList(MemberListType lt,MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberList *ml = getMemberList(lt);
|
|
Packit |
1c1d7e |
if (ml) ml->remove(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GroupDef::sortSubGroups()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
groupList->sort();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::isLinkableInProject() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return !isReference() && isLinkable();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::isLinkable() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return hasUserDocumentation();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// let the "programming language" for a group depend on what is inserted into it.
|
|
Packit |
1c1d7e |
// First item that has an associated languages determines the language for the whole group.
|
|
Packit |
1c1d7e |
void GroupDef::updateLanguage(const Definition *d)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (getLanguage()==SrcLangExt_Unknown && d->getLanguage()!=SrcLangExt_Unknown)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setLanguage(d->getLanguage());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool GroupDef::hasDetailedDescription() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
|
|
Packit |
1c1d7e |
return ((!briefDescription().isEmpty() && repeatBrief) ||
|
|
Packit |
1c1d7e |
!documentation().isEmpty());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|