Blame src/namespacedef.cpp

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 "namespacedef.h"
Packit 1c1d7e
#include "outputlist.h"
Packit 1c1d7e
#include "util.h"
Packit 1c1d7e
#include "language.h"
Packit 1c1d7e
#include "classdef.h"
Packit 1c1d7e
#include "classlist.h"
Packit 1c1d7e
#include "memberlist.h"
Packit 1c1d7e
#include "doxygen.h"
Packit 1c1d7e
#include "message.h"
Packit 1c1d7e
#include "docparser.h"
Packit 1c1d7e
#include "searchindex.h"
Packit 1c1d7e
#include "vhdldocgen.h"
Packit 1c1d7e
#include "layout.h"
Packit 1c1d7e
#include "membergroup.h"
Packit 1c1d7e
#include "config.h"
Packit 1c1d7e
Packit 1c1d7e
//------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
Packit 1c1d7e
                           const char *name,const char *lref,
Packit 1c1d7e
                           const char *fName, const char*type,
Packit 1c1d7e
                           bool isPublished) :
Packit 1c1d7e
   Definition(df,dl,dc,name)
Packit 1c1d7e
  ,m_isPublished(isPublished)
Packit 1c1d7e
{
Packit 1c1d7e
  if (fName)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (lref)
Packit 1c1d7e
    {
Packit 1c1d7e
      fileName = stripExtension(fName);
Packit 1c1d7e
    }
Packit 1c1d7e
    else
Packit 1c1d7e
    {
Packit 1c1d7e
      fileName = convertNameToFile(stripExtension(fName));
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    setFileName(name);
Packit 1c1d7e
  }
Packit 1c1d7e
  classSDict = new ClassSDict(17);
Packit 1c1d7e
  namespaceSDict = new NamespaceSDict(17);
Packit 1c1d7e
  m_innerCompounds = new SDict<Definition>(17);
Packit 1c1d7e
  usingDirList = 0;
Packit 1c1d7e
  usingDeclList = 0;
Packit 1c1d7e
  m_allMembersDict = 0;
Packit 1c1d7e
  setReference(lref);
Packit 1c1d7e
  memberGroupSDict = new MemberGroupSDict;
Packit 1c1d7e
  memberGroupSDict->setAutoDelete(TRUE);
Packit 1c1d7e
  visited=FALSE;
Packit 1c1d7e
  m_subGrouping=Config_getBool(SUBGROUPING);
Packit 1c1d7e
  if (type && !strcmp("module", type))
Packit 1c1d7e
  {
Packit 1c1d7e
    m_type = MODULE;
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (type && !strcmp("constants", type))
Packit 1c1d7e
  {
Packit 1c1d7e
    m_type = CONSTANT_GROUP;
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (type && !strcmp("library", type))
Packit 1c1d7e
  {
Packit 1c1d7e
    m_type = LIBRARY;
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    m_type = NAMESPACE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
NamespaceDef::~NamespaceDef()
Packit 1c1d7e
{
Packit 1c1d7e
  delete classSDict;
Packit 1c1d7e
  delete namespaceSDict;
Packit 1c1d7e
  delete m_innerCompounds;
Packit 1c1d7e
  delete usingDirList;
Packit 1c1d7e
  delete usingDeclList;
Packit 1c1d7e
  delete memberGroupSDict;
Packit 1c1d7e
  delete m_allMembersDict;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::setFileName(const QCString &fn)
Packit 1c1d7e
{
Packit 1c1d7e
  if (isReference())
Packit 1c1d7e
  {
Packit 1c1d7e
    fileName = "namespace"+fn;
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    fileName = convertNameToFile("namespace"+fn);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::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 NamespaceDef::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
  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 NamespaceDef::insertUsedFile(FileDef *fd)
Packit 1c1d7e
{
Packit 1c1d7e
  if (fd==0) return;
Packit 1c1d7e
  if (files.find(fd)==-1) 
Packit 1c1d7e
  {
Packit 1c1d7e
    if (Config_getBool(SORT_MEMBER_DOCS))
Packit 1c1d7e
      files.inSort(fd);
Packit 1c1d7e
    else
Packit 1c1d7e
      files.append(fd);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::addInnerCompound(Definition *d)
Packit 1c1d7e
{
Packit 1c1d7e
  m_innerCompounds->append(d->localName(),d);
Packit 1c1d7e
  if (d->definitionType()==Definition::TypeNamespace)
Packit 1c1d7e
  {
Packit 1c1d7e
    insertNamespace((NamespaceDef *)d);
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (d->definitionType()==Definition::TypeClass)
Packit 1c1d7e
  {
Packit 1c1d7e
    insertClass((ClassDef *)d);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::insertClass(ClassDef *cd)
Packit 1c1d7e
{
Packit 1c1d7e
  if (classSDict->find(cd->name())==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (Config_getBool(SORT_BRIEF_DOCS))
Packit 1c1d7e
      classSDict->inSort(cd->name(),cd);
Packit 1c1d7e
    else
Packit 1c1d7e
      classSDict->append(cd->name(),cd);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::insertNamespace(NamespaceDef *nd)
Packit 1c1d7e
{
Packit 1c1d7e
  if (namespaceSDict->find(nd->name())==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (Config_getBool(SORT_MEMBER_DOCS))
Packit 1c1d7e
      namespaceSDict->inSort(nd->name(),nd);
Packit 1c1d7e
    else
Packit 1c1d7e
      namespaceSDict->append(nd->name(),nd);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::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
  // add members inside sections to their groups
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
      if (mg->allMembersInSameSection() && m_subGrouping)
Packit 1c1d7e
      {
Packit 1c1d7e
        //printf("----> addToDeclarationSection(%s)\n",mg->header().data());
Packit 1c1d7e
        mg->addToDeclarationSection();
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::insertMember(MemberDef *md)
Packit 1c1d7e
{
Packit 1c1d7e
  if (md->isHidden()) return;
Packit 1c1d7e
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit 1c1d7e
  if (allMemberList==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    allMemberList = new MemberList(MemberListType_allMembersList);
Packit 1c1d7e
    m_memberLists.append(allMemberList);
Packit 1c1d7e
  }
Packit 1c1d7e
  allMemberList->append(md); 
Packit 1c1d7e
  if (m_allMembersDict==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_allMembersDict = new MemberSDict;
Packit 1c1d7e
  }
Packit 1c1d7e
  //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data());
Packit 1c1d7e
  m_allMembersDict->append(md->localName(),md); 
Packit 1c1d7e
  //::addNamespaceMemberNameToIndex(md);
Packit 1c1d7e
  //static bool sortBriefDocs=Config_getBool(SORT_BRIEF_DOCS);
Packit 1c1d7e
  switch(md->memberType())
Packit 1c1d7e
  {
Packit 1c1d7e
    case MemberType_Variable:     
Packit 1c1d7e
      addMemberToList(MemberListType_decVarMembers,md);
Packit 1c1d7e
      addMemberToList(MemberListType_docVarMembers,md);
Packit 1c1d7e
      break;
Packit 1c1d7e
    case MemberType_Function: 
Packit 1c1d7e
      addMemberToList(MemberListType_decFuncMembers,md);
Packit 1c1d7e
      addMemberToList(MemberListType_docFuncMembers,md);
Packit 1c1d7e
      break;
Packit 1c1d7e
    case MemberType_Typedef:      
Packit 1c1d7e
      addMemberToList(MemberListType_decTypedefMembers,md);
Packit 1c1d7e
      addMemberToList(MemberListType_docTypedefMembers,md);
Packit 1c1d7e
      break;
Packit 1c1d7e
    case MemberType_Enumeration:  
Packit 1c1d7e
      addMemberToList(MemberListType_decEnumMembers,md);
Packit 1c1d7e
      addMemberToList(MemberListType_docEnumMembers,md);
Packit 1c1d7e
      break;
Packit 1c1d7e
    case MemberType_EnumValue:    
Packit 1c1d7e
      break;
Packit 1c1d7e
    case MemberType_Define:       
Packit 1c1d7e
      addMemberToList(MemberListType_decDefineMembers,md);
Packit 1c1d7e
      addMemberToList(MemberListType_docDefineMembers,md);
Packit 1c1d7e
      break;
Packit 1c1d7e
    default:
Packit 1c1d7e
      err("NamespaceDef::insertMembers(): "
Packit 1c1d7e
           "member `%s' with class scope `%s' inserted in namespace scope `%s'!\n",
Packit 1c1d7e
           md->name().data(),
Packit 1c1d7e
           md->getClassDef() ? md->getClassDef()->name().data() : "",
Packit 1c1d7e
           name().data());
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::computeAnchors()
Packit 1c1d7e
{
Packit 1c1d7e
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit 1c1d7e
  if (allMemberList) setAnchors(allMemberList);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
bool NamespaceDef::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
Packit 1c1d7e
void NamespaceDef::writeTagFile(FTextStream &tagFile)
Packit 1c1d7e
{
Packit 1c1d7e
  tagFile << "  <compound kind=\"namespace\">" << endl;
Packit 1c1d7e
  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
Packit 1c1d7e
  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
Packit 1c1d7e
  QCString idStr = id();
Packit 1c1d7e
  if (!idStr.isEmpty())
Packit 1c1d7e
  {
Packit 1c1d7e
    tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  QListIterator<LayoutDocEntry> eli(
Packit 1c1d7e
      LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
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::NamespaceNestedNamespaces:
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()) << "</namespace>" << endl;
Packit 1c1d7e
              }
Packit 1c1d7e
            }
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
        break;
Packit 1c1d7e
      case LayoutDocEntry::NamespaceClasses:
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
      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 NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
Packit 1c1d7e
{
Packit 1c1d7e
  if (hasDetailedDescription())
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
    ol.startGroupHeader();
Packit 1c1d7e
    ol.parseText(title);
Packit 1c1d7e
    ol.endGroupHeader();
Packit 1c1d7e
Packit 1c1d7e
    ol.startTextBlock();
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
    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
    if (!documentation().isEmpty())
Packit 1c1d7e
    {
Packit 1c1d7e
      ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
Packit 1c1d7e
    }
Packit 1c1d7e
    ol.endTextBlock();
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::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 (hasDetailedDescription())
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
    // FIXME:PARA
Packit 1c1d7e
    //ol.pushGeneratorState();
Packit 1c1d7e
    //ol.disable(OutputGenerator::RTF);
Packit 1c1d7e
    //ol.newParagraph();
Packit 1c1d7e
    //ol.popGeneratorState();
Packit 1c1d7e
  }
Packit 1c1d7e
  ol.writeSynopsis();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::startMemberDeclarations(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  ol.startMemberSections();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::endMemberDeclarations(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  ol.endMemberSections();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::startMemberDocumentation(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(SEPARATE_MEMBER_PAGES))
Packit 1c1d7e
  {
Packit 1c1d7e
    ol.disable(OutputGenerator::Html);
Packit 1c1d7e
    Doxygen::suppressDocWarnings = TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::endMemberDocumentation(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(SEPARATE_MEMBER_PAGES))
Packit 1c1d7e
  {
Packit 1c1d7e
    ol.enable(OutputGenerator::Html);
Packit 1c1d7e
    Doxygen::suppressDocWarnings = FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title)
Packit 1c1d7e
{
Packit 1c1d7e
  if (classSDict) classSDict->writeDeclaration(ol,0,title,TRUE);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeInlineClasses(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  if (classSDict) classSDict->writeDocumentation(ol,this);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
Packit 1c1d7e
            bool const isConstantGroup)
Packit 1c1d7e
{
Packit 1c1d7e
  if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup,TRUE);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeMemberGroups(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  /* write user defined member groups */
Packit 1c1d7e
  if (memberGroupSDict)
Packit 1c1d7e
  {
Packit 1c1d7e
    memberGroupSDict->sort();
Packit 1c1d7e
    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit 1c1d7e
    MemberGroup *mg;
Packit 1c1d7e
    for (;(mg=mgli.current());++mgli)
Packit 1c1d7e
    {
Packit 1c1d7e
      if ((!mg->allMembersInSameSection() || !m_subGrouping) 
Packit 1c1d7e
          && mg->header()!="[NOHEADER]")
Packit 1c1d7e
      {
Packit 1c1d7e
        mg->writeDeclarations(ol,0,this,0,0);
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
  
Packit 1c1d7e
void NamespaceDef::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 NamespaceDef::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::Namespace));
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::NamespaceClasses && classSDict && classSDict->declVisible()) || 
Packit 1c1d7e
        (lde->kind()==LayoutDocEntry::NamespaceNestedNamespaces && namespaceSDict && namespaceSDict->declVisible())
Packit 1c1d7e
       )
Packit 1c1d7e
    {
Packit 1c1d7e
      LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit 1c1d7e
      QCString label = lde->kind()==LayoutDocEntry::NamespaceClasses ? "nested-classes" : "namespaces";
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 NamespaceDef::addNamespaceAttributes(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  // UNO IDL constant groups may be published
Packit 1c1d7e
  if (getLanguage()==SrcLangExt_IDL && isConstantGroup() && m_isPublished)
Packit 1c1d7e
  {
Packit 1c1d7e
    ol.pushGeneratorState();
Packit 1c1d7e
    ol.disableAllBut(OutputGenerator::Html);
Packit 1c1d7e
    ol.startLabels();
Packit 1c1d7e
    ol.writeLabel("published",false);
Packit 1c1d7e
    ol.endLabels();
Packit 1c1d7e
    ol.popGeneratorState();
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeDocumentation(OutputList &ol)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
Packit 1c1d7e
  //static bool outputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
Packit 1c1d7e
  //static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit 1c1d7e
Packit 1c1d7e
  QCString pageTitle = title();
Packit 1c1d7e
  startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
Packit 1c1d7e
Packit 1c1d7e
  if (!generateTreeView)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (getOuterScope()!=Doxygen::globalScope)
Packit 1c1d7e
    {
Packit 1c1d7e
      writeNavigationPath(ol);
Packit 1c1d7e
    }
Packit 1c1d7e
    ol.endQuickIndices();
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  startTitle(ol,getOutputFileBase(),this);
Packit 1c1d7e
  ol.parseText(pageTitle);
Packit 1c1d7e
  addGroupListToTitle(ol,this);
Packit 1c1d7e
  addNamespaceAttributes(ol);
Packit 1c1d7e
  endTitle(ol,getOutputFileBase(),displayName());
Packit 1c1d7e
  ol.startContents();
Packit 1c1d7e
  
Packit 1c1d7e
  if (Doxygen::searchIndex)
Packit 1c1d7e
  {
Packit 1c1d7e
    Doxygen::searchIndex->setCurrentDoc(this,anchor(),FALSE);
Packit 1c1d7e
    Doxygen::searchIndex->addWord(localName(),TRUE);
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  Doxygen::indexList->addIndexItem(this,0);
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::Namespace));
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::NamespaceClasses: 
Packit 1c1d7e
        {
Packit 1c1d7e
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit 1c1d7e
          writeClassDeclarations(ol,ls->title(lang));
Packit 1c1d7e
        }
Packit 1c1d7e
        break; 
Packit 1c1d7e
      case LayoutDocEntry::NamespaceNestedNamespaces: 
Packit 1c1d7e
        {
Packit 1c1d7e
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit 1c1d7e
          writeNamespaceDeclarations(ol,ls->title(lang),false);
Packit 1c1d7e
        }
Packit 1c1d7e
        break; 
Packit 1c1d7e
      case LayoutDocEntry::NamespaceNestedConstantGroups:
Packit 1c1d7e
        {
Packit 1c1d7e
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit 1c1d7e
          writeNamespaceDeclarations(ol,ls->title(lang),true);
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::NamespaceInlineClasses:
Packit 1c1d7e
        writeInlineClasses(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::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::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::GroupClasses: 
Packit 1c1d7e
      case LayoutDocEntry::GroupInlineClasses: 
Packit 1c1d7e
      case LayoutDocEntry::GroupNamespaces:
Packit 1c1d7e
      case LayoutDocEntry::GroupDirs: 
Packit 1c1d7e
      case LayoutDocEntry::GroupNestedGroups: 
Packit 1c1d7e
      case LayoutDocEntry::GroupFiles:
Packit 1c1d7e
      case LayoutDocEntry::GroupGraph: 
Packit 1c1d7e
      case LayoutDocEntry::GroupPageDocs:
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::Namespace entry list\n",lde->kind());
Packit 1c1d7e
        break;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  //---------------------------------------- end flexible part -------------------------------
Packit 1c1d7e
Packit 1c1d7e
  ol.endContents();
Packit 1c1d7e
Packit 1c1d7e
  endFileWithNavPath(this,ol);
Packit 1c1d7e
Packit 1c1d7e
  if (Config_getBool(SEPARATE_MEMBER_PAGES))
Packit 1c1d7e
  {
Packit 1c1d7e
    MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit 1c1d7e
    if (allMemberList) allMemberList->sort();
Packit 1c1d7e
    writeMemberPages(ol);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::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,displayName(),this);
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  ol.popGeneratorState();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::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
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit 1c1d7e
  if (allMemberList)
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->getNamespaceDef()==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
Packit 1c1d7e
  ol.writeString("        \n");
Packit 1c1d7e
  ol.writeString("      \n");
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
int NamespaceDef::countMembers()
Packit 1c1d7e
{
Packit 1c1d7e
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit 1c1d7e
  if (allMemberList) allMemberList->countDocMembers();
Packit 1c1d7e
  return (allMemberList ? allMemberList->numDocMembers() : 0)+classSDict->count();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::addUsingDirective(NamespaceDef *nd)
Packit 1c1d7e
{
Packit 1c1d7e
  if (usingDirList==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    usingDirList = new NamespaceSDict;
Packit 1c1d7e
  }
Packit 1c1d7e
  if (usingDirList->find(nd->qualifiedName())==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    usingDirList->append(nd->qualifiedName(),nd);
Packit 1c1d7e
  }
Packit 1c1d7e
  //printf("%p: NamespaceDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
NamespaceSDict *NamespaceDef::getUsedNamespaces() const 
Packit 1c1d7e
{ 
Packit 1c1d7e
  //printf("%p: NamespaceDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
Packit 1c1d7e
  return usingDirList; 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::addUsingDeclaration(Definition *d)
Packit 1c1d7e
{
Packit 1c1d7e
  if (usingDeclList==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    usingDeclList = new SDict<Definition>(17);
Packit 1c1d7e
  }
Packit 1c1d7e
  if (usingDeclList->find(d->qualifiedName())==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    usingDeclList->append(d->qualifiedName(),d);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString NamespaceDef::getOutputFileBase() const
Packit 1c1d7e
{
Packit 1c1d7e
  return fileName;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Definition *NamespaceDef::findInnerCompound(const char *n) const
Packit 1c1d7e
{
Packit 1c1d7e
  if (n==0) return 0;
Packit 1c1d7e
  Definition *d = m_innerCompounds->find(n);
Packit 1c1d7e
  if (d==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (usingDirList)
Packit 1c1d7e
    {
Packit 1c1d7e
      d = usingDirList->find(n);
Packit 1c1d7e
    }
Packit 1c1d7e
    if (d==0 && usingDeclList)
Packit 1c1d7e
    {
Packit 1c1d7e
      d = usingDeclList->find(n);
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return d;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::addListReferences()
Packit 1c1d7e
{
Packit 1c1d7e
  //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit 1c1d7e
  {
Packit 1c1d7e
    QList<ListItemInfo> *xrefItems = xrefListItems();
Packit 1c1d7e
    addRefItem(xrefItems,
Packit 1c1d7e
        qualifiedName(),
Packit 1c1d7e
        getLanguage()==SrcLangExt_Fortran ? 
Packit 1c1d7e
          theTranslator->trModule(TRUE,TRUE) : 
Packit 1c1d7e
          theTranslator->trNamespace(TRUE,TRUE),
Packit 1c1d7e
        getOutputFileBase(),displayName(),
Packit 1c1d7e
        0,
Packit 1c1d7e
        this
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
QCString NamespaceDef::displayName(bool includeScope) const
Packit 1c1d7e
{
Packit 1c1d7e
  QCString result=includeScope ? name() : localName();
Packit 1c1d7e
  SrcLangExt lang = getLanguage();
Packit 1c1d7e
  QCString sep = getLanguageSpecificSeparator(lang);
Packit 1c1d7e
  if (sep!="::")
Packit 1c1d7e
  {
Packit 1c1d7e
    result = substitute(result,"::",sep);
Packit 1c1d7e
  }
Packit 1c1d7e
  //printf("NamespaceDef::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
Packit 1c1d7e
  return result; 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString NamespaceDef::localName() const
Packit 1c1d7e
{
Packit 1c1d7e
  QCString result=name();
Packit 1c1d7e
  int i=result.findRev("::");
Packit 1c1d7e
  if (i!=-1)
Packit 1c1d7e
  {
Packit 1c1d7e
    result=result.mid(i+2);
Packit 1c1d7e
  }
Packit 1c1d7e
  return result;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::combineUsingRelations()
Packit 1c1d7e
{
Packit 1c1d7e
  if (visited) return; // already done
Packit 1c1d7e
  visited=TRUE;
Packit 1c1d7e
  if (usingDirList)
Packit 1c1d7e
  {
Packit 1c1d7e
    NamespaceSDict::Iterator nli(*usingDirList);
Packit 1c1d7e
    NamespaceDef *nd;
Packit 1c1d7e
    for (nli.toFirst();(nd=nli.current());++nli)
Packit 1c1d7e
    {
Packit 1c1d7e
      nd->combineUsingRelations();
Packit 1c1d7e
    }
Packit 1c1d7e
    for (nli.toFirst();(nd=nli.current());++nli)
Packit 1c1d7e
    {
Packit 1c1d7e
      // add used namespaces of namespace nd to this namespace
Packit 1c1d7e
      if (nd->getUsedNamespaces())
Packit 1c1d7e
      {
Packit 1c1d7e
        NamespaceSDict::Iterator unli(*nd->getUsedNamespaces());
Packit 1c1d7e
        NamespaceDef *und;
Packit 1c1d7e
        for (unli.toFirst();(und=unli.current());++unli)
Packit 1c1d7e
        {
Packit 1c1d7e
          //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data());
Packit 1c1d7e
          addUsingDirective(und);
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      // add used classes of namespace nd to this namespace
Packit 1c1d7e
      if (nd->getUsedClasses())
Packit 1c1d7e
      {
Packit 1c1d7e
        SDict<Definition>::Iterator cli(*nd->getUsedClasses());
Packit 1c1d7e
        Definition *ucd;
Packit 1c1d7e
        for (cli.toFirst();(ucd=cli.current());++cli)
Packit 1c1d7e
        {
Packit 1c1d7e
          //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data());
Packit 1c1d7e
          addUsingDeclaration(ucd);
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
bool NamespaceSDict::declVisible() const
Packit 1c1d7e
{
Packit 1c1d7e
  SDict<NamespaceDef>::Iterator ni(*this);
Packit 1c1d7e
  NamespaceDef *nd;
Packit 1c1d7e
  for (ni.toFirst();(nd=ni.current());++ni)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (nd->isLinkable())
Packit 1c1d7e
    {
Packit 1c1d7e
      return TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
Packit 1c1d7e
        bool const isConstantGroup,bool localName)
Packit 1c1d7e
{
Packit 1c1d7e
 
Packit 1c1d7e
Packit 1c1d7e
  if (count()==0) return; // no namespaces in the list
Packit 1c1d7e
Packit 1c1d7e
  if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) return;
Packit 1c1d7e
 
Packit 1c1d7e
Packit 1c1d7e
  SDict<NamespaceDef>::Iterator ni(*this);
Packit 1c1d7e
  NamespaceDef *nd;
Packit 1c1d7e
  bool found=FALSE;
Packit 1c1d7e
  for (ni.toFirst();(nd=ni.current()) && !found;++ni)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (nd->isLinkable())
Packit 1c1d7e
    {
Packit 1c1d7e
      SrcLangExt lang = nd->getLanguage();
Packit 1c1d7e
      if (SrcLangExt_IDL==lang)
Packit 1c1d7e
      {
Packit 1c1d7e
        if (isConstantGroup == nd->isConstantGroup())
Packit 1c1d7e
        {
Packit 1c1d7e
          found=TRUE;
Packit 1c1d7e
          break;
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      else if (!isConstantGroup) // ensure we only get extra section in IDL
Packit 1c1d7e
      {
Packit 1c1d7e
        if (nd->isConstantGroup())
Packit 1c1d7e
        {
Packit 1c1d7e
          err("Internal inconsistency: constant group but not IDL?\n");
Packit 1c1d7e
        }
Packit 1c1d7e
        found=TRUE;
Packit 1c1d7e
        break;
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  if (!found) return; // no linkable namespaces in the list
Packit 1c1d7e
Packit 1c1d7e
  // write list of namespaces
Packit 1c1d7e
  ol.startMemberHeader("namespaces");
Packit 1c1d7e
  //bool javaOpt    = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
Packit 1c1d7e
  //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit 1c1d7e
  ol.parseText(title);
Packit 1c1d7e
  ol.endMemberHeader();
Packit 1c1d7e
  ol.startMemberList();
Packit 1c1d7e
  for (ni.toFirst();(nd=ni.current());++ni)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (nd->isLinkable() && nd->hasDocumentation())
Packit 1c1d7e
    {
Packit 1c1d7e
      SrcLangExt lang = nd->getLanguage();
Packit 1c1d7e
      if (lang==SrcLangExt_IDL && (isConstantGroup != nd->isConstantGroup()))
Packit 1c1d7e
          continue; // will be output in another pass, see layout_default.xml
Packit 1c1d7e
      ol.startMemberDeclaration();
Packit 1c1d7e
      ol.startMemberItem(nd->getOutputFileBase(),0);
Packit 1c1d7e
      QCString ct = nd->compoundTypeString();
Packit 1c1d7e
      ol.docify(ct);
Packit 1c1d7e
      ol.docify(" ");
Packit 1c1d7e
      ol.insertMemberAlign();
Packit 1c1d7e
      QCString name;
Packit 1c1d7e
      if (localName)
Packit 1c1d7e
      {
Packit 1c1d7e
        name = nd->localName();
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        name = nd->displayName();
Packit 1c1d7e
      }
Packit 1c1d7e
      ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
Packit 1c1d7e
      ol.endMemberItem();
Packit 1c1d7e
      if (!nd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
Packit 1c1d7e
      {
Packit 1c1d7e
        ol.startMemberDescription(nd->getOutputFileBase());
Packit 1c1d7e
        ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
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
MemberList *NamespaceDef::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
  return ml;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::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
#if 0
Packit 1c1d7e
  if (ml->needsSorting())
Packit 1c1d7e
    ml->inSort(md);
Packit 1c1d7e
  else
Packit 1c1d7e
    ml->append(md);
Packit 1c1d7e
#endif
Packit 1c1d7e
Packit 1c1d7e
  if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::sortMemberLists()
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->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
Packit 1c1d7e
  }
Packit 1c1d7e
  if (classSDict)
Packit 1c1d7e
  {
Packit 1c1d7e
    classSDict->sort();
Packit 1c1d7e
  }
Packit 1c1d7e
  if (namespaceSDict)
Packit 1c1d7e
  {
Packit 1c1d7e
    namespaceSDict->sort();
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
MemberList *NamespaceDef::getMemberList(MemberListType lt) const
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()==lt)
Packit 1c1d7e
    {
Packit 1c1d7e
      return ml;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return 0;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
Packit 1c1d7e
{
Packit 1c1d7e
  MemberList * ml = getMemberList(lt);
Packit 1c1d7e
  if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
Packit 1c1d7e
{
Packit 1c1d7e
  MemberList * ml = getMemberList(lt);
Packit 1c1d7e
  if (ml) ml->writeDocumentation(ol,displayName(),this,title);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
bool NamespaceDef::isLinkableInProject() const
Packit 1c1d7e
{
Packit 1c1d7e
  int i = name().findRev("::");
Packit 1c1d7e
  if (i==-1) i=0; else i+=2;
Packit 1c1d7e
  static bool extractAnonNs = Config_getBool(EXTRACT_ANON_NSPACES);
Packit 1c1d7e
  if (extractAnonNs &&                             // extract anonymous ns
Packit 1c1d7e
      name().mid(i,20)=="anonymous_namespace{"     // correct prefix
Packit 1c1d7e
     )                                             // not disabled by config
Packit 1c1d7e
  {
Packit 1c1d7e
    return TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
  return !name().isEmpty() && name().at(i)!='@' && // not anonymous
Packit 1c1d7e
    (hasDocumentation() || getLanguage()==SrcLangExt_CSharp) &&  // documented
Packit 1c1d7e
    !isReference() &&      // not an external reference
Packit 1c1d7e
    !isHidden() &&         // not hidden
Packit 1c1d7e
    !isArtificial();       // or artificial
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
bool NamespaceDef::isLinkable() const
Packit 1c1d7e
{
Packit 1c1d7e
  return isLinkableInProject() || isReference();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
Packit 1c1d7e
{
Packit 1c1d7e
  MemberDef *md = 0;
Packit 1c1d7e
  if (m_allMembersDict && !n.isEmpty())
Packit 1c1d7e
  {
Packit 1c1d7e
    md = m_allMembersDict->find(n);
Packit 1c1d7e
    //printf("%s::m_allMembersDict->find(%s)=%p\n",name().data(),n.data(),md);
Packit 1c1d7e
  }
Packit 1c1d7e
  return md;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString NamespaceDef::title() const
Packit 1c1d7e
{
Packit 1c1d7e
  SrcLangExt lang = getLanguage();
Packit 1c1d7e
  QCString pageTitle;
Packit 1c1d7e
  if (lang==SrcLangExt_Java)
Packit 1c1d7e
  {
Packit 1c1d7e
    pageTitle = theTranslator->trPackage(displayName());
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (lang==SrcLangExt_Fortran)
Packit 1c1d7e
  {
Packit 1c1d7e
    pageTitle = theTranslator->trModuleReference(displayName());
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (lang==SrcLangExt_IDL)
Packit 1c1d7e
  {
Packit 1c1d7e
    pageTitle = isConstantGroup()
Packit 1c1d7e
        ? theTranslator->trConstantGroupReference(displayName())
Packit 1c1d7e
        : theTranslator->trModuleReference(displayName());
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    pageTitle = theTranslator->trNamespaceReference(displayName());
Packit 1c1d7e
  }
Packit 1c1d7e
  return pageTitle;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString NamespaceDef::compoundTypeString() const
Packit 1c1d7e
{
Packit 1c1d7e
  SrcLangExt lang = getLanguage();
Packit 1c1d7e
  if (lang==SrcLangExt_Java)
Packit 1c1d7e
  {
Packit 1c1d7e
    return "package";
Packit 1c1d7e
  }
Packit 1c1d7e
  else if(lang==SrcLangExt_CSharp)
Packit 1c1d7e
  {
Packit 1c1d7e
	return "namespace";
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (lang==SrcLangExt_Fortran)
Packit 1c1d7e
  {
Packit 1c1d7e
    return "module";
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (lang==SrcLangExt_IDL)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (isModule())
Packit 1c1d7e
    {
Packit 1c1d7e
      return "module";
Packit 1c1d7e
    }
Packit 1c1d7e
    else if (isConstantGroup())
Packit 1c1d7e
    {
Packit 1c1d7e
      return "constants";
Packit 1c1d7e
    }
Packit 1c1d7e
    else if (isLibrary())
Packit 1c1d7e
    {
Packit 1c1d7e
      return "library";
Packit 1c1d7e
    }
Packit 1c1d7e
    else
Packit 1c1d7e
    {
Packit 1c1d7e
      err_full(getDefFileName(),getDefLine(),"Internal inconsistency: namespace in IDL not module, library or constant group");
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return "";
Packit 1c1d7e
}
Packit 1c1d7e