⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 groupdef.cpp

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * * $Id: groupdef.cpp,v 1.29 2001/03/19 19:27:40 root Exp $ * * Copyright (C) 1997-2001 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby  * granted. No representations are made about the suitability of this software  * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * */#include <ctype.h>#include "qtbc.h"#include "groupdef.h"#include "classdef.h"#include "filedef.h"#include "classlist.h"#include "outputlist.h"#include "doc.h"#include "namespacedef.h"#include "language.h"#include "util.h"#include "memberlist.h"#include "message.h"#include "membergroup.h"#include "doxygen.h"#include "page.h"GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) :    Definition(df,dl,na){  fileList = new FileList;  classSDict = new ClassSDict(257);  groupList = new GroupList;  parentGroupList = new GroupList;  namespaceList = new NamespaceList;  pageDict = new PageSDict(257);  exampleDict = new PageSDict(257);  allMemberList = new MemberList;  allMemberNameInfoSDict = new MemberNameInfoSDict(17);  fileName = (QCString)"group_"+na;  setGroupTitle( t );  memberGroupList = new MemberGroupList;  memberGroupList->setAutoDelete(TRUE);  memberGroupDict = new MemberGroupDict(1009);  decDefineMembers.setInGroup(TRUE);  decProtoMembers.setInGroup(TRUE);  decTypedefMembers.setInGroup(TRUE);  decEnumMembers.setInGroup(TRUE);  decEnumValMembers.setInGroup(TRUE);  decFuncMembers.setInGroup(TRUE);  decVarMembers.setInGroup(TRUE);  docDefineMembers.setInGroup(TRUE);  docProtoMembers.setInGroup(TRUE);  docTypedefMembers.setInGroup(TRUE);  docEnumMembers.setInGroup(TRUE);  docFuncMembers.setInGroup(TRUE);  docVarMembers.setInGroup(TRUE);  visited = 0;}GroupDef::~GroupDef(){  delete fileList;  delete classSDict;  delete groupList;  delete parentGroupList;  delete namespaceList;  delete pageDict;  delete exampleDict;  delete allMemberList;  delete allMemberNameInfoSDict;  delete memberGroupList;  delete memberGroupDict;}void GroupDef::setGroupTitle( const char *t ){  if ( t && strlen(t) )  {    title = t;    titleSet = TRUE;  }  else  {    title = name();    title.at(0)=toupper(title.at(0));    titleSet = FALSE;  }}void GroupDef::distributeMemberGroupDocumentation(){  MemberGroupListIterator mgli(*memberGroupList);  MemberGroup *mg;  for (;(mg=mgli.current());++mgli)  {    mg->distributeMemberGroupDocumentation();  }}void GroupDef::addFile(const FileDef *def){  if (Config_getBool("SORT_MEMBER_DOCS"))    fileList->inSort(def);  else    fileList->append(def);}void GroupDef::addClass(const ClassDef *cd){  if (Config_getBool("SORT_MEMBER_DOCS"))    classSDict->inSort(cd->name(),cd);  else    classSDict->append(cd->name(),cd);}void GroupDef::addNamespace(const NamespaceDef *def){  if (Config_getBool("SORT_MEMBER_DOCS"))    namespaceList->inSort(def);    else    namespaceList->append(def);}void GroupDef::addPage(PageInfo *def){  pageDict->append(def->name,def);  def->inGroup = this;}void GroupDef::addExample(const PageInfo *def){  exampleDict->append(def->name,def);}void GroupDef::addMembersToMemberGroup(){  ::addMembersToMemberGroup(&decDefineMembers,memberGroupDict,memberGroupList);  ::addMembersToMemberGroup(&decProtoMembers,memberGroupDict,memberGroupList);  ::addMembersToMemberGroup(&decTypedefMembers,memberGroupDict,memberGroupList);  ::addMembersToMemberGroup(&decEnumMembers,memberGroupDict,memberGroupList);  ::addMembersToMemberGroup(&decEnumValMembers,memberGroupDict,memberGroupList);  ::addMembersToMemberGroup(&decFuncMembers,memberGroupDict,memberGroupList);  ::addMembersToMemberGroup(&decVarMembers,memberGroupDict,memberGroupList);  //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());  MemberGroupListIterator mgli(*memberGroupList);  MemberGroup *mg;  for (;(mg=mgli.current());++mgli)  {    mg->setInGroup(TRUE);  }}void GroupDef::insertMember(MemberDef *md,bool docOnly){  //fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());  MemberNameInfo *mni=0;  if ((mni=(*allMemberNameInfoSDict)[md->name()]))  { // member with this name already found    MemberNameInfoIterator srcMnii(*mni);     MemberInfo *srcMi;    for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )    {      MemberDef *srcMd = srcMi->memberDef;      if (matchArguments(srcMd->argumentList(),md->argumentList()) &&           srcMd->getOuterScope()==md->getOuterScope())      {        return; // member already added      }    }    mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));  }  else  {    mni = new MemberNameInfo(md->name());    mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));    allMemberNameInfoSDict->append(mni->memberName(),mni);  }  allMemberList->append(md);   switch(md->memberType())  {    case MemberDef::Variable:           if (!docOnly) decVarMembers.append(md);       if (Config_getBool("SORT_MEMBER_DOCS"))        docVarMembers.inSort(md);       else        docVarMembers.append(md);      break;    case MemberDef::Function:       if (!docOnly) decFuncMembers.append(md);      if (Config_getBool("SORT_MEMBER_DOCS"))            docFuncMembers.inSort(md);       else        docFuncMembers.append(md);      break;    case MemberDef::Typedef:            if (!docOnly) decTypedefMembers.append(md);      if (Config_getBool("SORT_MEMBER_DOCS"))        docTypedefMembers.inSort(md);       else        docTypedefMembers.append(md);      break;    case MemberDef::Enumeration:        if (!docOnly) decEnumMembers.append(md);      if (Config_getBool("SORT_MEMBER_DOCS"))        docEnumMembers.inSort(md);       else        docEnumMembers.append(md);      break;    case MemberDef::EnumValue:          break;    case MemberDef::Prototype:          if (!docOnly) decProtoMembers.append(md);      if (Config_getBool("SORT_MEMBER_DOCS"))        docProtoMembers.inSort(md);       else        docProtoMembers.append(md);      break;    case MemberDef::Define:             if (!docOnly) decDefineMembers.append(md);      if (Config_getBool("SORT_MEMBER_DOCS"))        docDefineMembers.inSort(md);       else        docDefineMembers.append(md);      break;    default:      err("GroupDef::insertMembers(): "           "member `%s' with class scope `%s' inserted in group scope `%s'!\n",           md->name().data(),           md->getClassDef() ? md->getClassDef()->name().data() : "",           name().data());  }  //addMemberToGroup(md,groupId);}void GroupDef::removeMember(MemberDef *md){  // fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());  MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name());  if (mni)  {    MemberNameInfoIterator mnii(*mni);    while( mnii.current() )    {      if( mnii.current()->memberDef == md )      {	mni->remove(mnii.current());        break;      }      ++mnii;    }    if( mni->isEmpty() )    {      allMemberNameInfoSDict->remove(md->name());      delete mni;    }    allMemberList->remove(md);     switch(md->memberType())    {      case MemberDef::Variable:	decVarMembers.remove(md);        docVarMembers.remove(md);        break;      case MemberDef::Function:         decFuncMembers.remove(md);        docFuncMembers.remove(md);        break;      case MemberDef::Typedef:              decTypedefMembers.remove(md);        docTypedefMembers.remove(md);        break;      case MemberDef::Enumeration:          decEnumMembers.remove(md);        docEnumMembers.remove(md);        break;      case MemberDef::EnumValue:            break;      case MemberDef::Prototype:            decProtoMembers.remove(md);        docProtoMembers.remove(md);        break;      case MemberDef::Define:               decDefineMembers.remove(md);        docDefineMembers.remove(md);        break;      default:        err("GroupDef::removeMember(): unexpected member remove in file!\n");    }  }}bool GroupDef::containsGroup(const GroupDef *def){    return groupList->find(def) >= 0;}void GroupDef::addGroup(const GroupDef *def){  if (Config_getBool("SORT_MEMBER_DOCS"))    groupList->inSort(def);  else    groupList->append(def);}void GroupDef::addParentGroup(const GroupDef *def){  if (Config_getBool("SORT_MEMBER_DOCS"))    parentGroupList->inSort(def);  else    parentGroupList->append(def);}bool GroupDef::isASubGroup() const{  return parentGroupList->count()!=0;}int GroupDef::countMembers() const{  return fileList->count()+         classSDict->count()+         namespaceList->count()+         groupList->count()+         allMemberList->count()+         pageDict->count()+         exampleDict->count();}/*! Compute the HTML anchor names for all members in the class */ void GroupDef::computeAnchors(){  setAnchors('a',allMemberList);}void GroupDef::writeDocumentation(OutputList &ol){  ol.pushGeneratorState();  //ol.disable(OutputGenerator::Man);  startFile(ol,getOutputFileBase(),name(),title);  startTitle(ol,getOutputFileBase());  ol.docify(title);  endTitle(ol,getOutputFileBase(),title);  //brief=brief.stripWhiteSpace();  //int bl=brief.length();  OutputList briefOutput(&ol);  if (!briefDescription().isEmpty())  {    parseDoc(briefOutput,m_defFileName,m_defLine,name(),0,briefDescription());    ol+=briefOutput;    ol.writeString(" \n");    ol.pushGeneratorState();    ol.disable(OutputGenerator::Latex);    ol.disable(OutputGenerator::RTF);    ol.startTextLink(0,"_details");    parseText(ol,theTranslator->trMore());    ol.endTextLink();    //ol.enable(OutputGenerator::Latex);    ol.popGeneratorState();  }  if (!Config_getString("GENERATE_TAGFILE").isEmpty())   {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -