|
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 <qregexp.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "memberlist.h"
|
|
Packit |
1c1d7e |
#include "classdef.h"
|
|
Packit |
1c1d7e |
#include "message.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "language.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "outputlist.h"
|
|
Packit |
1c1d7e |
#include "groupdef.h"
|
|
Packit |
1c1d7e |
#include "marshal.h"
|
|
Packit |
1c1d7e |
#include "vhdldocgen.h"
|
|
Packit |
1c1d7e |
#include "namespacedef.h"
|
|
Packit |
1c1d7e |
#include "filedef.h"
|
|
Packit |
1c1d7e |
#include "membergroup.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
#include "docparser.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList::MemberList() : m_listType(MemberListType_pubMethods)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
memberGroupList=0;
|
|
Packit |
1c1d7e |
m_varCnt=0;
|
|
Packit |
1c1d7e |
m_funcCnt=0;
|
|
Packit |
1c1d7e |
m_enumCnt=0;
|
|
Packit |
1c1d7e |
m_enumValCnt=0;
|
|
Packit |
1c1d7e |
m_typeCnt=0;
|
|
Packit |
1c1d7e |
m_protoCnt=0;
|
|
Packit |
1c1d7e |
m_defCnt=0;
|
|
Packit |
1c1d7e |
m_friendCnt=0;
|
|
Packit |
1c1d7e |
m_numDecMembers=-1; // special value indicating that value needs to be computed
|
|
Packit |
1c1d7e |
m_numDocMembers=-1; // special value indicating that value needs to be computed
|
|
Packit |
1c1d7e |
m_inGroup=FALSE;
|
|
Packit |
1c1d7e |
m_inFile=FALSE;
|
|
Packit |
1c1d7e |
m_needsSorting=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList::MemberList(MemberListType lt) : m_listType(lt)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
memberGroupList=0;
|
|
Packit |
1c1d7e |
m_varCnt=0;
|
|
Packit |
1c1d7e |
m_funcCnt=0;
|
|
Packit |
1c1d7e |
m_enumCnt=0;
|
|
Packit |
1c1d7e |
m_enumValCnt=0;
|
|
Packit |
1c1d7e |
m_typeCnt=0;
|
|
Packit |
1c1d7e |
m_protoCnt=0;
|
|
Packit |
1c1d7e |
m_defCnt=0;
|
|
Packit |
1c1d7e |
m_friendCnt=0;
|
|
Packit |
1c1d7e |
m_numDecMembers=-1; // special value indicating that value needs to be computed
|
|
Packit |
1c1d7e |
m_numDocMembers=-1; // special value indicating that value needs to be computed
|
|
Packit |
1c1d7e |
m_inGroup=FALSE;
|
|
Packit |
1c1d7e |
m_inFile=FALSE;
|
|
Packit |
1c1d7e |
m_needsSorting=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList::~MemberList()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete memberGroupList;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int MemberList::compareValues(const MemberDef *c1, const MemberDef *c2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool sortConstructorsFirst = Config_getBool(SORT_MEMBERS_CTORS_1ST);
|
|
Packit |
1c1d7e |
if (sortConstructorsFirst) {
|
|
Packit |
1c1d7e |
int ord1 = c1->isConstructor() ? 2 : (c1->isDestructor() ? 1 : 0);
|
|
Packit |
1c1d7e |
int ord2 = c2->isConstructor() ? 2 : (c2->isDestructor() ? 1 : 0);
|
|
Packit |
1c1d7e |
if (ord1 > ord2)
|
|
Packit |
1c1d7e |
return -1;
|
|
Packit |
1c1d7e |
else if (ord2 > ord1)
|
|
Packit |
1c1d7e |
return 1;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
int cmp = qstricmp(c1->name(),c2->name());
|
|
Packit |
1c1d7e |
return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int MemberList::countInheritableMembers(ClassDef *inheritedFrom) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int count=0;
|
|
Packit |
1c1d7e |
QListIterator<MemberDef> mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(md=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isBriefSectionVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->memberType()!=MemberType_Friend &&
|
|
Packit |
1c1d7e |
md->memberType()!=MemberType_EnumValue)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("member %s: isReimplementedBy(%s)=%d\n",md->name().data(),
|
|
Packit |
1c1d7e |
// inheritedFrom->name().data(),
|
|
Packit |
1c1d7e |
// md->isReimplementedBy(inheritedFrom));
|
|
Packit |
1c1d7e |
if (md->memberType()==MemberType_Function)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!md->isReimplementedBy(inheritedFrom)) count++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
count++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
count+=mg->countInheritableMembers(inheritedFrom);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("%s::countInheritableMembers(%s)=%d\n",
|
|
Packit |
1c1d7e |
// listTypeAsString().data(),
|
|
Packit |
1c1d7e |
// inheritedFrom->name().data(),count);
|
|
Packit |
1c1d7e |
return count;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Count the number of members in this list that are visible in
|
|
Packit |
1c1d7e |
* the declaration part of a compound's documentation page.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_numDecMembers!=-1) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("----- countDecMembers count=%d ----\n",count());
|
|
Packit |
1c1d7e |
m_varCnt=m_funcCnt=m_enumCnt=m_enumValCnt=0;
|
|
Packit |
1c1d7e |
m_typeCnt=m_protoCnt=m_defCnt=m_friendCnt=0;
|
|
Packit |
1c1d7e |
m_numDecMembers=0;
|
|
Packit |
1c1d7e |
QListIterator<MemberDef> mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(md=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("MemberList::countDecMembers(md=%s,%d)\n",md->name().data(),md->isBriefSectionVisible());
|
|
Packit |
1c1d7e |
if (md->isBriefSectionVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch(md->memberType())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberType_Variable: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Event: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Property: m_varCnt++,m_numDecMembers++;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
// apparently necessary to get this to show up in declarations section?
|
|
Packit |
1c1d7e |
case MemberType_Interface: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Service: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Function: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Signal: // fall through
|
|
Packit |
1c1d7e |
case MemberType_DCOP: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Slot: if (!md->isRelated() || md->getClassDef())
|
|
Packit |
1c1d7e |
m_funcCnt++,m_numDecMembers++;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Enumeration: m_enumCnt++,m_numDecMembers++; break;
|
|
Packit |
1c1d7e |
case MemberType_EnumValue: if (countEnumValues)
|
|
Packit |
1c1d7e |
m_enumValCnt++,m_numDecMembers++;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Typedef: m_typeCnt++,m_numDecMembers++; break;
|
|
Packit |
1c1d7e |
//case MemberType_Prototype: m_protoCnt++,m_numDecMembers++; break;
|
|
Packit |
1c1d7e |
case MemberType_Define: if (Config_getBool(EXTRACT_ALL) ||
|
|
Packit |
1c1d7e |
md->argsString() ||
|
|
Packit |
1c1d7e |
!md->initializer().isEmpty() ||
|
|
Packit |
1c1d7e |
md->hasDocumentation()
|
|
Packit |
1c1d7e |
) m_defCnt++,m_numDecMembers++;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Friend: m_friendCnt++,m_numDecMembers++;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
default:
|
|
Packit |
1c1d7e |
err("Unknown member type found for member `%s'\n!",md->name().data());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->countDecMembers(gd);
|
|
Packit |
1c1d7e |
m_varCnt+=mg->varCount();
|
|
Packit |
1c1d7e |
m_funcCnt+=mg->funcCount();
|
|
Packit |
1c1d7e |
m_enumCnt+=mg->enumCount();
|
|
Packit |
1c1d7e |
m_enumValCnt+=mg->enumValueCount();
|
|
Packit |
1c1d7e |
m_typeCnt+=mg->typedefCount();
|
|
Packit |
1c1d7e |
m_protoCnt+=mg->protoCount();
|
|
Packit |
1c1d7e |
m_defCnt+=mg->defineCount();
|
|
Packit |
1c1d7e |
m_friendCnt+=mg->friendCount();
|
|
Packit |
1c1d7e |
m_numDecMembers+=mg->numDecMembers();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("----- end countDecMembers ----\n");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("MemberList::countDecMembers()=%d\n",m_numDecMembers);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::countDocMembers(bool countEnumValues)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_numDocMembers!=-1) return; // used cached value
|
|
Packit |
1c1d7e |
m_numDocMembers=0;
|
|
Packit |
1c1d7e |
QListIterator<MemberDef> mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for (mli.toFirst();(md=mli.current());++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isDetailedSectionVisible(m_inGroup,m_inFile))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// do not count enum values, since they do not produce entries of their own
|
|
Packit |
1c1d7e |
if (countEnumValues || md->memberType()!=MemberType_EnumValue)
|
|
Packit |
1c1d7e |
m_numDocMembers++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->countDocMembers();
|
|
Packit |
1c1d7e |
m_numDocMembers+=mg->numDocMembers();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::inSort(const MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QList<MemberDef>::inSort(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::append(const MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QList<MemberDef>::append(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::remove(const MemberDef *md)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QList<MemberDef>::remove(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::sort()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QList<MemberDef>::sort();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
uint MemberList::count() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return QList<MemberDef>::count();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int MemberList::findRef(const MemberDef *md) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return QList<MemberDef>::findRef(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberDef *MemberList::getFirst() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return QList<MemberDef>::getFirst();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberDef *MemberList::take(uint index)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return QList<MemberDef>::take(index);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberListIterator::MemberListIterator(const MemberList &l) :
|
|
Packit |
1c1d7e |
QListIterator<MemberDef>(l)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int MemberList::countEnumValues(MemberDef *md,bool setAnonEnumType) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int enumVars=0;
|
|
Packit |
1c1d7e |
MemberListIterator vmli(*this);
|
|
Packit |
1c1d7e |
MemberDef *vmd;
|
|
Packit |
1c1d7e |
QCString name(md->name());
|
|
Packit |
1c1d7e |
int i=name.findRev("::");
|
|
Packit |
1c1d7e |
if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?)
|
|
Packit |
1c1d7e |
if (name[0]=='@') // anonymous enum => append variables
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
for ( ; (vmd=vmli.current()) ; ++vmli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString vtype=vmd->typeString();
|
|
Packit |
1c1d7e |
if ((vtype.find(name))!=-1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
enumVars++;
|
|
Packit |
1c1d7e |
if (setAnonEnumType)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
vmd->setAnonymousEnumType(md);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return enumVars;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool MemberList::declVisible() const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()); ++mli )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isBriefSectionVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch (md->memberType())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberType_Define: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Typedef: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Variable: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Function: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Signal: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Slot: // fall through
|
|
Packit |
1c1d7e |
case MemberType_DCOP: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Property: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Interface: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Service: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Event:
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
case MemberType_Enumeration:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// if this is an anonymous enum and there are variables of this
|
|
Packit |
1c1d7e |
// enum type (i.e. enumVars>0), then we do not show the enum here.
|
|
Packit |
1c1d7e |
if (countEnumValues(md,FALSE)==0) // show enum here
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case MemberType_Friend:
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
case MemberType_EnumValue:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_inGroup)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::writePlainDeclarations(OutputList &ol,
|
|
Packit |
1c1d7e |
ClassDef *cd,NamespaceDef *nd,FileDef *fd,
|
|
Packit |
1c1d7e |
GroupDef *gd,ClassDef *inheritedFrom,const char *inheritId
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("----- writePlainDeclaration() ----\n");
|
|
Packit |
1c1d7e |
static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
|
|
Packit |
1c1d7e |
countDecMembers();
|
|
Packit |
1c1d7e |
if (numDecMembers()==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(" --> no members!\n");
|
|
Packit |
1c1d7e |
return; // no members in this list
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf(" --> writePlainDeclaration() numDecMembers()=%d\n",
|
|
Packit |
1c1d7e |
// numDecMembers());
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool first=TRUE;
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()); ++mli )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(">>> Member `%s' type=%d visible=%d\n",
|
|
Packit |
1c1d7e |
// md->name().data(),md->memberType(),md->isBriefSectionVisible());
|
|
Packit |
1c1d7e |
if ((inheritedFrom==0 || !md->isReimplementedBy(inheritedFrom)) &&
|
|
Packit |
1c1d7e |
md->isBriefSectionVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(">>> rendering\n");
|
|
Packit |
1c1d7e |
switch(md->memberType())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberType_Define: // fall through
|
|
Packit |
1c1d7e |
//case MemberType_Prototype: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Typedef: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Variable: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Function: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Signal: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Slot: // fall through
|
|
Packit |
1c1d7e |
case MemberType_DCOP: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Property: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Interface: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Service: // fall through
|
|
Packit |
1c1d7e |
case MemberType_Event:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (first) ol.startMemberList(),first=FALSE;
|
|
Packit |
1c1d7e |
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
case MemberType_Enumeration:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// if this is an anonymous enum and there are variables of this
|
|
Packit |
1c1d7e |
// enum type (i.e. enumVars>0), then we do not show the enum here.
|
|
Packit |
1c1d7e |
if (countEnumValues(md,TRUE)==0) // show enum here
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Enum!!\n");
|
|
Packit |
1c1d7e |
if (first)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberList();
|
|
Packit |
1c1d7e |
first=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startMemberDeclaration();
|
|
Packit |
1c1d7e |
ol.startMemberItem(md->anchor(),0,inheritId);
|
|
Packit |
1c1d7e |
bool detailsLinkable = md->isDetailedSectionLinkable();
|
|
Packit |
1c1d7e |
if (!detailsLinkable)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startDoxyAnchor(md->getOutputFileBase(),0,md->anchor(),md->name(),QCString());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.writeString("enum ");
|
|
Packit |
1c1d7e |
ol.insertMemberAlign();
|
|
Packit |
1c1d7e |
md->writeEnumDeclaration(ol,cd,nd,fd,gd);
|
|
Packit |
1c1d7e |
if (!detailsLinkable)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.endDoxyAnchor(md->getOutputFileBase(),md->anchor());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberItem();
|
|
Packit |
1c1d7e |
if (!md->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
DocRoot *rootNode = validatingParseDoc(
|
|
Packit |
1c1d7e |
md->briefFile(),md->briefLine(),
|
|
Packit |
1c1d7e |
cd,md,
|
|
Packit |
1c1d7e |
md->briefDescription(),
|
|
Packit |
1c1d7e |
TRUE,FALSE,0,TRUE,FALSE
|
|
Packit |
1c1d7e |
);
|
|
Packit |
1c1d7e |
if (rootNode && !rootNode->isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberDescription(md->anchor());
|
|
Packit |
1c1d7e |
ol.writeDoc(rootNode,cd,md);
|
|
Packit |
1c1d7e |
if (md->isDetailedSectionLinkable())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
ol.docify(" ");
|
|
Packit |
1c1d7e |
ol.startTextLink(md->getOutputFileBase(),
|
|
Packit |
1c1d7e |
md->anchor());
|
|
Packit |
1c1d7e |
ol.parseText(theTranslator->trMore());
|
|
Packit |
1c1d7e |
ol.endTextLink();
|
|
Packit |
1c1d7e |
ol.enableAll();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDescription();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
delete rootNode;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDeclaration(md->anchor(),inheritId);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
md->warnIfUndocumented();
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
case MemberType_Friend:
|
|
Packit |
1c1d7e |
if (inheritedFrom==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (first)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberList();
|
|
Packit |
1c1d7e |
first=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
case MemberType_EnumValue:
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_inGroup)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("EnumValue!\n");
|
|
Packit |
1c1d7e |
if (first) ol.startMemberList(),first=FALSE;
|
|
Packit |
1c1d7e |
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// handle members that are inside anonymous compounds and for which
|
|
Packit |
1c1d7e |
// no variables of the anonymous compound type exist.
|
|
Packit |
1c1d7e |
if (cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()) ; ++mli )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->fromAnonymousScope() && !md->anonymousDeclShown())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->setFromAnonymousScope(FALSE);
|
|
Packit |
1c1d7e |
//printf("anonymous compound members\n");
|
|
Packit |
1c1d7e |
if (md->isBriefSectionVisible())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (first)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberList();
|
|
Packit |
1c1d7e |
first=FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
md->setFromAnonymousScope(TRUE);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!first)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.endMemberList();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
//printf("----- end writePlainDeclaration() ----\n");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Writes the list of members to the output.
|
|
Packit |
1c1d7e |
* @param ol Output list to write to
|
|
Packit |
1c1d7e |
* @param cd non-null if this list is part of class documentation.
|
|
Packit |
1c1d7e |
* @param nd non-null if this list is part of namespace documentation.
|
|
Packit |
1c1d7e |
* @param fd non-null if this list is part of file documentation.
|
|
Packit |
1c1d7e |
* @param gd non-null if this list is part of group documentation.
|
|
Packit |
1c1d7e |
* @param title Title to use for the member list.
|
|
Packit |
1c1d7e |
* @param subtitle Sub title to use for the member list.
|
|
Packit |
1c1d7e |
* @param showEnumValues Obsolete, always set to FALSE.
|
|
Packit |
1c1d7e |
* @param showInline if set to TRUE if title is rendered differently
|
|
Packit |
1c1d7e |
* @param inheritedFrom if not 0, the list is shown inside the
|
|
Packit |
1c1d7e |
* given class as inherited members, parameter cd points to the
|
|
Packit |
1c1d7e |
* class containing the members.
|
|
Packit |
1c1d7e |
* @param lt Type of list that is inherited from.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void MemberList::writeDeclarations(OutputList &ol,
|
|
Packit |
1c1d7e |
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
|
|
Packit |
1c1d7e |
const char *title,const char *subtitle, bool showEnumValues,
|
|
Packit |
1c1d7e |
bool showInline,ClassDef *inheritedFrom,MemberListType lt)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
(void)showEnumValues; // unused
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("----- writeDeclaration() this=%p ---- inheritedFrom=%p\n",this,inheritedFrom);
|
|
Packit |
1c1d7e |
static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
|
|
Packit |
1c1d7e |
QCString inheritId;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
countDecMembers(/*showEnumValues*/FALSE,gd); // count members shown in this section
|
|
Packit |
1c1d7e |
Definition *ctx = cd;
|
|
Packit |
1c1d7e |
if (ctx==0 && nd) ctx = nd;
|
|
Packit |
1c1d7e |
if (ctx==0 && gd) ctx = gd;
|
|
Packit |
1c1d7e |
if (ctx==0 && fd) ctx = fd;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("%p: MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d inheritedFrom=%p\n",
|
|
Packit |
1c1d7e |
// this,title,subtitle,numDecMembers(),inheritedFrom);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int num = numDecMembers();
|
|
Packit |
1c1d7e |
if (inheritedFrom)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//if ( cd && !optimizeVhdl && countInheritableMembers(inheritedFrom)>0 )
|
|
Packit |
1c1d7e |
if ( cd && !optimizeVhdl && cd->countMembersIncludingGrouped(
|
|
Packit |
1c1d7e |
m_listType,inheritedFrom,TRUE)>0 )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disableAllBut(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
inheritId = substitute(listTypeAsString(lt),"-","_")+"_"+
|
|
Packit |
1c1d7e |
stripPath(cd->getOutputFileBase());
|
|
Packit |
1c1d7e |
if (title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeInheritedSectionTitle(inheritId,cd->getReference(),
|
|
Packit |
1c1d7e |
cd->getOutputFileBase(),
|
|
Packit |
1c1d7e |
cd->anchor(),title,cd->displayName());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else if (num>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (showInline)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startInlineHeader();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberHeader(listTypeAsString(m_listType));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
if (showInline)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.endInlineHeader();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.endMemberHeader();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (subtitle)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString st=subtitle;
|
|
Packit |
1c1d7e |
st = st.stripWhiteSpace();
|
|
Packit |
1c1d7e |
if (!st.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.startMemberSubtitle();
|
|
Packit |
1c1d7e |
ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE);
|
|
Packit |
1c1d7e |
ol.endMemberSubtitle();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (num>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// TODO: Two things need to be worked out for proper VHDL output:
|
|
Packit |
1c1d7e |
// 1. Signals and types under the group need to be
|
|
Packit |
1c1d7e |
// formatted to associate them with the group somehow
|
|
Packit |
1c1d7e |
// indentation, or at the very least, extra space after
|
|
Packit |
1c1d7e |
// the group is done
|
|
Packit |
1c1d7e |
// 2. This might need to be repeated below for memberGroupLists
|
|
Packit |
1c1d7e |
if (optimizeVhdl) // use specific declarations function
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
VhdlDocGen::writeVhdlDeclarations(this,ol,0,cd,0,0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//printf("memberGroupList=%p\n",memberGroupList);
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
while ((mg=mgli.current()))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
bool hasHeader=!mg->header().isEmpty() && mg->header()!="[NOHEADER]";
|
|
Packit |
1c1d7e |
if (inheritId.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("mg->header=%s hasHeader=%d\n",mg->header().data(),hasHeader);
|
|
Packit |
1c1d7e |
ol.startMemberGroupHeader(hasHeader);
|
|
Packit |
1c1d7e |
if (hasHeader)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.parseText(mg->header());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberGroupHeader();
|
|
Packit |
1c1d7e |
if (!mg->documentation().isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("Member group has docs!\n");
|
|
Packit |
1c1d7e |
ol.startMemberGroupDocs();
|
|
Packit |
1c1d7e |
ol.generateDoc(mg->docFile(),mg->docLine(),ctx,0,mg->documentation()+"\n",FALSE,FALSE);
|
|
Packit |
1c1d7e |
ol.endMemberGroupDocs();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startMemberGroup();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("--- mg->writePlainDeclarations ---\n");
|
|
Packit |
1c1d7e |
mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
|
|
Packit |
1c1d7e |
if (inheritId.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.endMemberGroup(hasHeader);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
++mgli;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (inheritedFrom && cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// also add members that of this list type, that are grouped together
|
|
Packit |
1c1d7e |
// in a separate list in class 'inheritedFrom'
|
|
Packit |
1c1d7e |
cd->addGroupedInheritedMembers(ol,m_listType,inheritedFrom,inheritId);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("----- end writeDeclaration() ----\n");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::writeDocumentation(OutputList &ol,
|
|
Packit |
1c1d7e |
const char *scopeName, Definition *container,
|
|
Packit |
1c1d7e |
const char *title,bool showEnumValues,bool showInline)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("MemberList::writeDocumentation()\n");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
countDocMembers(showEnumValues);
|
|
Packit |
1c1d7e |
if (numDocMembers()==0) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (title)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.pushGeneratorState();
|
|
Packit |
1c1d7e |
ol.disable(OutputGenerator::Html);
|
|
Packit |
1c1d7e |
ol.writeRuler();
|
|
Packit |
1c1d7e |
ol.popGeneratorState();
|
|
Packit |
1c1d7e |
ol.startGroupHeader(showInline ? 2 : 0);
|
|
Packit |
1c1d7e |
ol.parseText(title);
|
|
Packit |
1c1d7e |
ol.endGroupHeader(showInline ? 2 : 0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startMemberDocList();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// count the number of overloaded members
|
|
Packit |
1c1d7e |
QDict<uint> overloadTotalDict(67);
|
|
Packit |
1c1d7e |
QDict<uint> overloadCountDict(67);
|
|
Packit |
1c1d7e |
overloadTotalDict.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
overloadCountDict.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
for (mli.toFirst() ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) &&
|
|
Packit |
1c1d7e |
!(md->isEnumValue() && !showInline))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
uint *pCount = overloadTotalDict.find(md->name());
|
|
Packit |
1c1d7e |
if (pCount)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
(*pCount)++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
overloadTotalDict.insert(md->name(),new uint(1));
|
|
Packit |
1c1d7e |
overloadCountDict.insert(md->name(),new uint(1));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
for (mli.toFirst() ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isDetailedSectionVisible(m_inGroup,container->definitionType()==Definition::TypeFile) &&
|
|
Packit |
1c1d7e |
!(md->isEnumValue() && !showInline))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
uint overloadCount = *overloadTotalDict.find(md->name());
|
|
Packit |
1c1d7e |
uint *pCount = overloadCountDict.find(md->name());
|
|
Packit |
1c1d7e |
md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,
|
|
Packit |
1c1d7e |
m_inGroup,showEnumValues,showInline);
|
|
Packit |
1c1d7e |
(*pCount)++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
printf("MemberList::writeDocumentation() -- member groups %d\n",memberGroupList->count());
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->writeDocumentation(ol,scopeName,container,showEnumValues,showInline);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDocList();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// members in a table
|
|
Packit |
1c1d7e |
void MemberList::writeSimpleDocumentation(OutputList &ol,
|
|
Packit |
1c1d7e |
Definition *container)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
countDocMembers(FALSE);
|
|
Packit |
1c1d7e |
//printf("MemberList count=%d\n",numDocMembers());
|
|
Packit |
1c1d7e |
if (numDocMembers()==0) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassDef *cd = 0;
|
|
Packit |
1c1d7e |
if (container && container->definitionType()==Definition::TypeClass)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd = (ClassDef*)container;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startMemberDocSimple(cd && cd->isJavaEnum());
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->writeMemberDocSimple(ol,container);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.endMemberDocSimple(cd && cd->isJavaEnum());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// separate member pages
|
|
Packit |
1c1d7e |
void MemberList::writeDocumentationPage(OutputList &ol,
|
|
Packit |
1c1d7e |
const char *scopeName, Definition *container)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// count the number of overloaded members
|
|
Packit |
1c1d7e |
QDict<uint> overloadTotalDict(67);
|
|
Packit |
1c1d7e |
QDict<uint> overloadCountDict(67);
|
|
Packit |
1c1d7e |
overloadTotalDict.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
overloadCountDict.setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for (mli.toFirst() ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isDetailedSectionLinkable())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
uint *pCount = overloadTotalDict.find(md->name());
|
|
Packit |
1c1d7e |
if (pCount)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
(*pCount)++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
overloadTotalDict.insert(md->name(),new uint(1));
|
|
Packit |
1c1d7e |
overloadCountDict.insert(md->name(),new uint(1));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
for ( mli.toFirst() ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->isDetailedSectionLinkable())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
uint overloadCount = *overloadTotalDict.find(md->name());
|
|
Packit |
1c1d7e |
uint *pCount = overloadCountDict.find(md->name());
|
|
Packit |
1c1d7e |
QCString diskName=md->getOutputFileBase();
|
|
Packit |
1c1d7e |
QCString title=md->qualifiedName();
|
|
Packit |
1c1d7e |
startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,diskName);
|
|
Packit |
1c1d7e |
if (!generateTreeView)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
container->writeNavigationPath(ol);
|
|
Packit |
1c1d7e |
ol.endQuickIndices();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
ol.startContents();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (generateTreeView)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup);
|
|
Packit |
1c1d7e |
(*pCount)++;
|
|
Packit |
1c1d7e |
ol.endContents();
|
|
Packit |
1c1d7e |
endFileWithNavPath(container,ol);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeString("\n"
|
|
Packit |
1c1d7e |
" \n"
|
|
Packit |
1c1d7e |
" \n");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
container->writeQuickMemberLinks(ol,md);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
md->writeDocumentation(this,*pCount,overloadCount,ol,scopeName,container,m_inGroup);
|
|
Packit |
1c1d7e |
(*pCount)++;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
ol.writeString(" \n");
|
|
Packit |
1c1d7e |
ol.writeString("\n");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
endFile(ol);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("MemberList::writeDocumentation() -- member groups\n");
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->writeDocumentationPage(ol,scopeName,container);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::addMemberGroup(MemberGroup *mg)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (memberGroupList==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
memberGroupList=new MemberGroupList;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
//printf("addMemberGroup: this=%p mg=%p\n",this,mg);
|
|
Packit |
1c1d7e |
memberGroupList->append(mg);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::addListReferences(Definition *def)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->addListReference(def);
|
|
Packit |
1c1d7e |
MemberList *enumFields = md->enumFieldList();
|
|
Packit |
1c1d7e |
if (md->memberType()==MemberType_Enumeration && enumFields)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(" Adding enum values!\n");
|
|
Packit |
1c1d7e |
MemberListIterator vmli(*enumFields);
|
|
Packit |
1c1d7e |
MemberDef *vmd;
|
|
Packit |
1c1d7e |
for ( ; (vmd=vmli.current()) ; ++vmli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(" adding %s\n",vmd->name().data());
|
|
Packit |
1c1d7e |
vmd->addListReference(def);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->addListReferences(def);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::findSectionsInDocumentation()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->findSectionsInDocumentation();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg;
|
|
Packit |
1c1d7e |
for (;(mg=mgli.current());++mgli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->findSectionsInDocumentation();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::marshal(StorageIntf *s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
marshalInt(s,(int)m_listType);
|
|
Packit |
1c1d7e |
marshalInt(s,m_varCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_funcCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_enumCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_enumValCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_typeCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_protoCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_defCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_friendCnt);
|
|
Packit |
1c1d7e |
marshalInt(s,m_numDecMembers);
|
|
Packit |
1c1d7e |
marshalInt(s,m_numDocMembers);
|
|
Packit |
1c1d7e |
marshalBool(s,m_inGroup);
|
|
Packit |
1c1d7e |
marshalBool(s,m_inFile);
|
|
Packit |
1c1d7e |
marshalBool(s,m_needsSorting);
|
|
Packit |
1c1d7e |
if (memberGroupList==0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
marshalUInt(s,NULL_LIST); // null pointer representation
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
marshalUInt(s,memberGroupList->count());
|
|
Packit |
1c1d7e |
QListIterator<MemberGroup> mgi(*memberGroupList);
|
|
Packit |
1c1d7e |
MemberGroup *mg=0;
|
|
Packit |
1c1d7e |
for (mgi.toFirst();(mg=mgi.current());++mgi)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
mg->marshal(s);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::unmarshal(StorageIntf *s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_listType = (MemberListType)unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_varCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_funcCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_enumCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_enumValCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_typeCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_protoCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_defCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_friendCnt = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_numDecMembers = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_numDocMembers = unmarshalInt(s);
|
|
Packit |
1c1d7e |
m_inGroup = unmarshalBool(s);
|
|
Packit |
1c1d7e |
m_inFile = unmarshalBool(s);
|
|
Packit |
1c1d7e |
m_needsSorting = unmarshalBool(s);
|
|
Packit |
1c1d7e |
uint i,count = unmarshalUInt(s);
|
|
Packit |
1c1d7e |
if (count==NULL_LIST) // empty list
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
memberGroupList = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // add member groups
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
memberGroupList = new MemberGroupList;
|
|
Packit |
1c1d7e |
for (i=0;i
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroup *mg = new MemberGroup;
|
|
Packit |
1c1d7e |
mg->unmarshal(s);
|
|
Packit |
1c1d7e |
memberGroupList->append(mg);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::setNeedsSorting(bool b)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_needsSorting = b;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString MemberList::listTypeAsString(MemberListType type)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
switch(type)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
case MemberListType_pubMethods: return "pub-methods";
|
|
Packit |
1c1d7e |
case MemberListType_proMethods: return "pro-methods";
|
|
Packit |
1c1d7e |
case MemberListType_pacMethods: return "pac-methods";
|
|
Packit |
1c1d7e |
case MemberListType_priMethods: return "pri-methods";
|
|
Packit |
1c1d7e |
case MemberListType_pubStaticMethods: return "pub-static-methods";
|
|
Packit |
1c1d7e |
case MemberListType_proStaticMethods: return "pro-static-methods";
|
|
Packit |
1c1d7e |
case MemberListType_pacStaticMethods: return "pac-static-methods";
|
|
Packit |
1c1d7e |
case MemberListType_priStaticMethods: return "pri-static-methods";
|
|
Packit |
1c1d7e |
case MemberListType_pubSlots: return "pub-slots";
|
|
Packit |
1c1d7e |
case MemberListType_proSlots: return "pro-slots";
|
|
Packit |
1c1d7e |
case MemberListType_priSlots: return "pri-slots";
|
|
Packit |
1c1d7e |
case MemberListType_pubAttribs: return "pub-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_proAttribs: return "pro-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_pacAttribs: return "pac-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_priAttribs: return "pri-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_pubStaticAttribs: return "pub-static-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_proStaticAttribs: return "pro-static-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_pacStaticAttribs: return "pac-static-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_priStaticAttribs: return "pri-static-attribs";
|
|
Packit |
1c1d7e |
case MemberListType_pubTypes: return "pub-types";
|
|
Packit |
1c1d7e |
case MemberListType_proTypes: return "pro-types";
|
|
Packit |
1c1d7e |
case MemberListType_pacTypes: return "pac-types";
|
|
Packit |
1c1d7e |
case MemberListType_priTypes: return "pri-types";
|
|
Packit |
1c1d7e |
case MemberListType_related: return "related";
|
|
Packit |
1c1d7e |
case MemberListType_signals: return "signals";
|
|
Packit |
1c1d7e |
case MemberListType_friends: return "friends";
|
|
Packit |
1c1d7e |
case MemberListType_dcopMethods: return "dcop-methods";
|
|
Packit |
1c1d7e |
case MemberListType_properties: return "properties";
|
|
Packit |
1c1d7e |
case MemberListType_events: return "events";
|
|
Packit |
1c1d7e |
case MemberListType_interfaces: return "interfaces";
|
|
Packit |
1c1d7e |
case MemberListType_services: return "services";
|
|
Packit |
1c1d7e |
case MemberListType_decDefineMembers: return "define-members";
|
|
Packit |
1c1d7e |
case MemberListType_decProtoMembers: return "proto-members";
|
|
Packit |
1c1d7e |
case MemberListType_decTypedefMembers: return "typedef-members";
|
|
Packit |
1c1d7e |
case MemberListType_decEnumMembers: return "enum-members";
|
|
Packit |
1c1d7e |
case MemberListType_decFuncMembers: return "func-members";
|
|
Packit |
1c1d7e |
case MemberListType_decVarMembers: return "var-members";
|
|
Packit |
1c1d7e |
case MemberListType_decEnumValMembers: return "enumval-members";
|
|
Packit |
1c1d7e |
case MemberListType_decPubSlotMembers: return "pub-slot-members";
|
|
Packit |
1c1d7e |
case MemberListType_decProSlotMembers: return "pro-slot-members";
|
|
Packit |
1c1d7e |
case MemberListType_decPriSlotMembers: return "pri-slot-members";
|
|
Packit |
1c1d7e |
case MemberListType_decSignalMembers: return "signal-members";
|
|
Packit |
1c1d7e |
case MemberListType_decEventMembers: return "event-members";
|
|
Packit |
1c1d7e |
case MemberListType_decFriendMembers: return "friend-members";
|
|
Packit |
1c1d7e |
case MemberListType_decPropMembers: return "prop-members";
|
|
Packit |
1c1d7e |
case MemberListType_enumFields: return "enum-fields";
|
|
Packit |
1c1d7e |
case MemberListType_memberGroup: return "member-group";
|
|
Packit |
1c1d7e |
default: break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return "";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MemberList::writeTagFile(FTextStream &tagFile)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberListIterator mli(*this);
|
|
Packit |
1c1d7e |
MemberDef *md;
|
|
Packit |
1c1d7e |
for ( ; (md=mli.current()) ; ++mli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (md->getLanguage()!=SrcLangExt_VHDL)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
md->writeTagFile(tagFile);
|
|
Packit |
1c1d7e |
if (md->memberType()==MemberType_Enumeration && md->enumFieldList() && !md->isStrong())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberListIterator vmli(*md->enumFieldList());
|
|
Packit |
1c1d7e |
MemberDef *vmd;
|
|
Packit |
1c1d7e |
for ( ; (vmd=vmli.current()) ; ++vmli)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
vmd->writeTagFile(tagFile);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
VhdlDocGen::writeTagFile(md,tagFile);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (memberGroupList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MemberGroupListIterator mgli(*memberGroupList);
|
|
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 |
|
|
Packit |
1c1d7e |
//--------------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int MemberSDict::compareValues(const MemberDef *c1, const MemberDef *c2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("MemberSDict::compareValues(%s,%s)\n",c1->name().data(),c2->name().data());
|
|
Packit |
1c1d7e |
int cmp = qstricmp(c1->name(),c2->name());
|
|
Packit |
1c1d7e |
if (cmp)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return cmp;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return c1->getDefLine()-c2->getDefLine();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|