Blame src/namespacedef.cpp

Packit Service 50c9f2
/******************************************************************************
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * 
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * Permission to use, copy, modify, and distribute this software and its
Packit Service 50c9f2
 * documentation under the terms of the GNU General Public License is hereby 
Packit Service 50c9f2
 * granted. No representations are made about the suitability of this software 
Packit Service 50c9f2
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit Service 50c9f2
 * See the GNU General Public License for more details.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 * Documents produced by Doxygen are derivative works derived from the
Packit Service 50c9f2
 * input used in their production; they are not affected by this license.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 */
Packit Service 50c9f2
Packit Service 50c9f2
#include "namespacedef.h"
Packit Service 50c9f2
#include "outputlist.h"
Packit Service 50c9f2
#include "util.h"
Packit Service 50c9f2
#include "language.h"
Packit Service 50c9f2
#include "classdef.h"
Packit Service 50c9f2
#include "classlist.h"
Packit Service 50c9f2
#include "memberlist.h"
Packit Service 50c9f2
#include "doxygen.h"
Packit Service 50c9f2
#include "message.h"
Packit Service 50c9f2
#include "docparser.h"
Packit Service 50c9f2
#include "searchindex.h"
Packit Service 50c9f2
#include "vhdldocgen.h"
Packit Service 50c9f2
#include "layout.h"
Packit Service 50c9f2
#include "membergroup.h"
Packit Service 50c9f2
#include "config.h"
Packit Service 50c9f2
Packit Service 50c9f2
//------------------------------------------------------------------
Packit Service 50c9f2
Packit Service 50c9f2
NamespaceDef::NamespaceDef(const char *df,int dl,int dc,
Packit Service 50c9f2
                           const char *name,const char *lref,
Packit Service 50c9f2
                           const char *fName, const char*type,
Packit Service 50c9f2
                           bool isPublished) :
Packit Service 50c9f2
   Definition(df,dl,dc,name)
Packit Service 50c9f2
  ,m_isPublished(isPublished)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (fName)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (lref)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      fileName = stripExtension(fName);
Packit Service 50c9f2
    }
Packit Service 50c9f2
    else
Packit Service 50c9f2
    {
Packit Service 50c9f2
      fileName = convertNameToFile(stripExtension(fName));
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else
Packit Service 50c9f2
  {
Packit Service 50c9f2
    setFileName(name);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  classSDict = new ClassSDict(17);
Packit Service 50c9f2
  namespaceSDict = new NamespaceSDict(17);
Packit Service 50c9f2
  m_innerCompounds = new SDict<Definition>(17);
Packit Service 50c9f2
  usingDirList = 0;
Packit Service 50c9f2
  usingDeclList = 0;
Packit Service 50c9f2
  m_allMembersDict = 0;
Packit Service 50c9f2
  setReference(lref);
Packit Service 50c9f2
  memberGroupSDict = new MemberGroupSDict;
Packit Service 50c9f2
  memberGroupSDict->setAutoDelete(TRUE);
Packit Service 50c9f2
  visited=FALSE;
Packit Service 50c9f2
  m_subGrouping=Config_getBool(SUBGROUPING);
Packit Service 50c9f2
  if (type && !strcmp("module", type))
Packit Service 50c9f2
  {
Packit Service 50c9f2
    m_type = MODULE;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (type && !strcmp("constants", type))
Packit Service 50c9f2
  {
Packit Service 50c9f2
    m_type = CONSTANT_GROUP;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (type && !strcmp("library", type))
Packit Service 50c9f2
  {
Packit Service 50c9f2
    m_type = LIBRARY;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else
Packit Service 50c9f2
  {
Packit Service 50c9f2
    m_type = NAMESPACE;
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
NamespaceDef::~NamespaceDef()
Packit Service 50c9f2
{
Packit Service 50c9f2
  delete classSDict;
Packit Service 50c9f2
  delete namespaceSDict;
Packit Service 50c9f2
  delete m_innerCompounds;
Packit Service 50c9f2
  delete usingDirList;
Packit Service 50c9f2
  delete usingDeclList;
Packit Service 50c9f2
  delete memberGroupSDict;
Packit Service 50c9f2
  delete m_allMembersDict;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::setFileName(const QCString &fn)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (isReference())
Packit Service 50c9f2
  {
Packit Service 50c9f2
    fileName = "namespace"+fn;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else
Packit Service 50c9f2
  {
Packit Service 50c9f2
    fileName = convertNameToFile("namespace"+fn);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::distributeMemberGroupDocumentation()
Packit Service 50c9f2
{
Packit Service 50c9f2
  MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit Service 50c9f2
  MemberGroup *mg;
Packit Service 50c9f2
  for (;(mg=mgli.current());++mgli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    mg->distributeMemberGroupDocumentation();
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::findSectionsInDocumentation()
Packit Service 50c9f2
{
Packit Service 50c9f2
  docFindSections(documentation(),this,0,docFile());
Packit Service 50c9f2
  MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit Service 50c9f2
  MemberGroup *mg;
Packit Service 50c9f2
  for (;(mg=mgli.current());++mgli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    mg->findSectionsInDocumentation();
Packit Service 50c9f2
  }
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->listType()&MemberListType_declarationLists)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ml->findSectionsInDocumentation();
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::insertUsedFile(FileDef *fd)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (fd==0) return;
Packit Service 50c9f2
  if (files.find(fd)==-1) 
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (Config_getBool(SORT_MEMBER_DOCS))
Packit Service 50c9f2
      files.inSort(fd);
Packit Service 50c9f2
    else
Packit Service 50c9f2
      files.append(fd);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addInnerCompound(Definition *d)
Packit Service 50c9f2
{
Packit Service 50c9f2
  m_innerCompounds->append(d->localName(),d);
Packit Service 50c9f2
  if (d->definitionType()==Definition::TypeNamespace)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    insertNamespace((NamespaceDef *)d);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (d->definitionType()==Definition::TypeClass)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    insertClass((ClassDef *)d);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::insertClass(ClassDef *cd)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (classSDict->find(cd->name())==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (Config_getBool(SORT_BRIEF_DOCS))
Packit Service 50c9f2
      classSDict->inSort(cd->name(),cd);
Packit Service 50c9f2
    else
Packit Service 50c9f2
      classSDict->append(cd->name(),cd);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::insertNamespace(NamespaceDef *nd)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (namespaceSDict->find(nd->name())==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (Config_getBool(SORT_MEMBER_DOCS))
Packit Service 50c9f2
      namespaceSDict->inSort(nd->name(),nd);
Packit Service 50c9f2
    else
Packit Service 50c9f2
      namespaceSDict->append(nd->name(),nd);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addMembersToMemberGroup()
Packit Service 50c9f2
{
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->listType()&MemberListType_declarationLists)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
Packit Service 50c9f2
  // add members inside sections to their groups
Packit Service 50c9f2
  if (memberGroupSDict)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit Service 50c9f2
    MemberGroup *mg;
Packit Service 50c9f2
    for (;(mg=mgli.current());++mgli)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      if (mg->allMembersInSameSection() && m_subGrouping)
Packit Service 50c9f2
      {
Packit Service 50c9f2
        //printf("----> addToDeclarationSection(%s)\n",mg->header().data());
Packit Service 50c9f2
        mg->addToDeclarationSection();
Packit Service 50c9f2
      }
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::insertMember(MemberDef *md)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (md->isHidden()) return;
Packit Service 50c9f2
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit Service 50c9f2
  if (allMemberList==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    allMemberList = new MemberList(MemberListType_allMembersList);
Packit Service 50c9f2
    m_memberLists.append(allMemberList);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  allMemberList->append(md); 
Packit Service 50c9f2
  if (m_allMembersDict==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    m_allMembersDict = new MemberSDict;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data());
Packit Service 50c9f2
  m_allMembersDict->append(md->localName(),md); 
Packit Service 50c9f2
  //::addNamespaceMemberNameToIndex(md);
Packit Service 50c9f2
  //static bool sortBriefDocs=Config_getBool(SORT_BRIEF_DOCS);
Packit Service 50c9f2
  switch(md->memberType())
Packit Service 50c9f2
  {
Packit Service 50c9f2
    case MemberType_Variable:     
Packit Service 50c9f2
      addMemberToList(MemberListType_decVarMembers,md);
Packit Service 50c9f2
      addMemberToList(MemberListType_docVarMembers,md);
Packit Service 50c9f2
      break;
Packit Service 50c9f2
    case MemberType_Function: 
Packit Service 50c9f2
      addMemberToList(MemberListType_decFuncMembers,md);
Packit Service 50c9f2
      addMemberToList(MemberListType_docFuncMembers,md);
Packit Service 50c9f2
      break;
Packit Service 50c9f2
    case MemberType_Typedef:      
Packit Service 50c9f2
      addMemberToList(MemberListType_decTypedefMembers,md);
Packit Service 50c9f2
      addMemberToList(MemberListType_docTypedefMembers,md);
Packit Service 50c9f2
      break;
Packit Service 50c9f2
    case MemberType_Enumeration:  
Packit Service 50c9f2
      addMemberToList(MemberListType_decEnumMembers,md);
Packit Service 50c9f2
      addMemberToList(MemberListType_docEnumMembers,md);
Packit Service 50c9f2
      break;
Packit Service 50c9f2
    case MemberType_EnumValue:    
Packit Service 50c9f2
      break;
Packit Service 50c9f2
    case MemberType_Define:       
Packit Service 50c9f2
      addMemberToList(MemberListType_decDefineMembers,md);
Packit Service 50c9f2
      addMemberToList(MemberListType_docDefineMembers,md);
Packit Service 50c9f2
      break;
Packit Service 50c9f2
    default:
Packit Service 50c9f2
      err("NamespaceDef::insertMembers(): "
Packit Service 50c9f2
           "member `%s' with class scope `%s' inserted in namespace scope `%s'!\n",
Packit Service 50c9f2
           md->name().data(),
Packit Service 50c9f2
           md->getClassDef() ? md->getClassDef()->name().data() : "",
Packit Service 50c9f2
           name().data());
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::computeAnchors()
Packit Service 50c9f2
{
Packit Service 50c9f2
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit Service 50c9f2
  if (allMemberList) setAnchors(allMemberList);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
bool NamespaceDef::hasDetailedDescription() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
Packit Service 50c9f2
  return ((!briefDescription().isEmpty() && repeatBrief) ||
Packit Service 50c9f2
          !documentation().isEmpty());
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeTagFile(FTextStream &tagFile)
Packit Service 50c9f2
{
Packit Service 50c9f2
  tagFile << "  <compound kind=\"namespace\">" << endl;
Packit Service 50c9f2
  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
Packit Service 50c9f2
  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
Packit Service 50c9f2
  QCString idStr = id();
Packit Service 50c9f2
  if (!idStr.isEmpty())
Packit Service 50c9f2
  {
Packit Service 50c9f2
    tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  QListIterator<LayoutDocEntry> eli(
Packit Service 50c9f2
      LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
Packit Service 50c9f2
  LayoutDocEntry *lde;
Packit Service 50c9f2
  for (eli.toFirst();(lde=eli.current());++eli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    switch (lde->kind())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      case LayoutDocEntry::NamespaceNestedNamespaces:
Packit Service 50c9f2
        {
Packit Service 50c9f2
          if (namespaceSDict)
Packit Service 50c9f2
          {
Packit Service 50c9f2
            SDict<NamespaceDef>::Iterator ni(*namespaceSDict);
Packit Service 50c9f2
            NamespaceDef *nd;
Packit Service 50c9f2
            for (ni.toFirst();(nd=ni.current());++ni)
Packit Service 50c9f2
            {
Packit Service 50c9f2
              if (nd->isLinkableInProject())
Packit Service 50c9f2
              {
Packit Service 50c9f2
                tagFile << "    <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
Packit Service 50c9f2
              }
Packit Service 50c9f2
            }
Packit Service 50c9f2
          }
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::NamespaceClasses:
Packit Service 50c9f2
        {
Packit Service 50c9f2
          if (classSDict)
Packit Service 50c9f2
          {
Packit Service 50c9f2
            SDict<ClassDef>::Iterator ci(*classSDict);
Packit Service 50c9f2
            ClassDef *cd;
Packit Service 50c9f2
            for (ci.toFirst();(cd=ci.current());++ci)
Packit Service 50c9f2
            {
Packit Service 50c9f2
              if (cd->isLinkableInProject())
Packit Service 50c9f2
              {
Packit Service 50c9f2
                tagFile << "    <class kind=\"" << cd->compoundTypeString()
Packit Service 50c9f2
                        << "\">" << convertToXML(cd->name()) << "</class>" << endl;
Packit Service 50c9f2
              }
Packit Service 50c9f2
            }
Packit Service 50c9f2
          }
Packit Service 50c9f2
        }
Packit Service 50c9f2
      case LayoutDocEntry::MemberDecl:
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
Packit Service 50c9f2
          MemberList * ml = getMemberList(lmd->type);
Packit Service 50c9f2
          if (ml)
Packit Service 50c9f2
          {
Packit Service 50c9f2
            ml->writeTagFile(tagFile);
Packit Service 50c9f2
          }
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::MemberGroups:
Packit Service 50c9f2
        {
Packit Service 50c9f2
          if (memberGroupSDict)
Packit Service 50c9f2
          {
Packit Service 50c9f2
            MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit Service 50c9f2
            MemberGroup *mg;
Packit Service 50c9f2
            for (;(mg=mgli.current());++mgli)
Packit Service 50c9f2
            {
Packit Service 50c9f2
              mg->writeTagFile(tagFile);
Packit Service 50c9f2
            }
Packit Service 50c9f2
          }
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      default:
Packit Service 50c9f2
        break;
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  writeDocAnchorsToTagFile(tagFile);
Packit Service 50c9f2
  tagFile << "  </compound>" << endl;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (hasDetailedDescription())
Packit Service 50c9f2
  {
Packit Service 50c9f2
    ol.pushGeneratorState();
Packit Service 50c9f2
      ol.disable(OutputGenerator::Html);
Packit Service 50c9f2
      ol.writeRuler();
Packit Service 50c9f2
    ol.popGeneratorState();
Packit Service 50c9f2
    ol.pushGeneratorState();
Packit Service 50c9f2
      ol.disableAllBut(OutputGenerator::Html);
Packit Service 50c9f2
      ol.writeAnchor(0,"details"); 
Packit Service 50c9f2
    ol.popGeneratorState();
Packit Service 50c9f2
    ol.startGroupHeader();
Packit Service 50c9f2
    ol.parseText(title);
Packit Service 50c9f2
    ol.endGroupHeader();
Packit Service 50c9f2
Packit Service 50c9f2
    ol.startTextBlock();
Packit Service 50c9f2
    if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ol.generateDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
Packit Service 50c9f2
    }
Packit Service 50c9f2
    if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) &&
Packit Service 50c9f2
        !documentation().isEmpty())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ol.pushGeneratorState();
Packit Service 50c9f2
        ol.disable(OutputGenerator::Man);
Packit Service 50c9f2
        ol.disable(OutputGenerator::RTF);
Packit Service 50c9f2
        //ol.newParagraph(); // FIXME:PARA
Packit Service 50c9f2
        ol.enableAll();
Packit Service 50c9f2
        ol.disableAllBut(OutputGenerator::Man);
Packit Service 50c9f2
        ol.enable(OutputGenerator::Latex);
Packit Service 50c9f2
        ol.writeString("\n\n");
Packit Service 50c9f2
      ol.popGeneratorState();
Packit Service 50c9f2
    }
Packit Service 50c9f2
    if (!documentation().isEmpty())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
Packit Service 50c9f2
    }
Packit Service 50c9f2
    ol.endTextBlock();
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeBriefDescription(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (hasBriefDescription())
Packit Service 50c9f2
  {
Packit Service 50c9f2
    DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
Packit Service 50c9f2
                        briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
Packit Service 50c9f2
    if (rootNode && !rootNode->isEmpty())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ol.startParagraph();
Packit Service 50c9f2
      ol.pushGeneratorState();
Packit Service 50c9f2
      ol.disableAllBut(OutputGenerator::Man);
Packit Service 50c9f2
      ol.writeString(" - ");
Packit Service 50c9f2
      ol.popGeneratorState();
Packit Service 50c9f2
      ol.writeDoc(rootNode,this,0);
Packit Service 50c9f2
      ol.pushGeneratorState();
Packit Service 50c9f2
      ol.disable(OutputGenerator::RTF);
Packit Service 50c9f2
      ol.writeString(" \n");
Packit Service 50c9f2
      ol.enable(OutputGenerator::RTF);
Packit Service 50c9f2
Packit Service 50c9f2
      if (hasDetailedDescription())
Packit Service 50c9f2
      {
Packit Service 50c9f2
        ol.disableAllBut(OutputGenerator::Html);
Packit Service 50c9f2
        ol.startTextLink(0,"details");
Packit Service 50c9f2
        ol.parseText(theTranslator->trMore());
Packit Service 50c9f2
        ol.endTextLink();
Packit Service 50c9f2
      }
Packit Service 50c9f2
      ol.popGeneratorState();
Packit Service 50c9f2
      ol.endParagraph();
Packit Service 50c9f2
    }
Packit Service 50c9f2
    delete rootNode;
Packit Service 50c9f2
Packit Service 50c9f2
    // FIXME:PARA
Packit Service 50c9f2
    //ol.pushGeneratorState();
Packit Service 50c9f2
    //ol.disable(OutputGenerator::RTF);
Packit Service 50c9f2
    //ol.newParagraph();
Packit Service 50c9f2
    //ol.popGeneratorState();
Packit Service 50c9f2
  }
Packit Service 50c9f2
  ol.writeSynopsis();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::startMemberDeclarations(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  ol.startMemberSections();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::endMemberDeclarations(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  ol.endMemberSections();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::startMemberDocumentation(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (Config_getBool(SEPARATE_MEMBER_PAGES))
Packit Service 50c9f2
  {
Packit Service 50c9f2
    ol.disable(OutputGenerator::Html);
Packit Service 50c9f2
    Doxygen::suppressDocWarnings = TRUE;
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::endMemberDocumentation(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (Config_getBool(SEPARATE_MEMBER_PAGES))
Packit Service 50c9f2
  {
Packit Service 50c9f2
    ol.enable(OutputGenerator::Html);
Packit Service 50c9f2
    Doxygen::suppressDocWarnings = FALSE;
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (classSDict) classSDict->writeDeclaration(ol,0,title,TRUE);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeInlineClasses(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (classSDict) classSDict->writeDocumentation(ol,this);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
Packit Service 50c9f2
            bool const isConstantGroup)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup,TRUE);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeMemberGroups(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  /* write user defined member groups */
Packit Service 50c9f2
  if (memberGroupSDict)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    memberGroupSDict->sort();
Packit Service 50c9f2
    MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit Service 50c9f2
    MemberGroup *mg;
Packit Service 50c9f2
    for (;(mg=mgli.current());++mgli)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      if ((!mg->allMembersInSameSection() || !m_subGrouping) 
Packit Service 50c9f2
          && mg->header()!="[NOHEADER]")
Packit Service 50c9f2
      {
Packit Service 50c9f2
        mg->writeDeclarations(ol,0,this,0,0);
Packit Service 50c9f2
      }
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
  
Packit Service 50c9f2
void NamespaceDef::writeAuthorSection(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  // write Author section (Man only)
Packit Service 50c9f2
  ol.pushGeneratorState();
Packit Service 50c9f2
  ol.disableAllBut(OutputGenerator::Man);
Packit Service 50c9f2
  ol.startGroupHeader();
Packit Service 50c9f2
  ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
Packit Service 50c9f2
  ol.endGroupHeader();
Packit Service 50c9f2
  ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME)));
Packit Service 50c9f2
  ol.popGeneratorState();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeSummaryLinks(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  ol.pushGeneratorState();
Packit Service 50c9f2
  ol.disableAllBut(OutputGenerator::Html);
Packit Service 50c9f2
  QListIterator<LayoutDocEntry> eli(
Packit Service 50c9f2
      LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
Packit Service 50c9f2
  LayoutDocEntry *lde;
Packit Service 50c9f2
  bool first=TRUE;
Packit Service 50c9f2
  SrcLangExt lang = getLanguage();
Packit Service 50c9f2
  for (eli.toFirst();(lde=eli.current());++eli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if ((lde->kind()==LayoutDocEntry::NamespaceClasses && classSDict && classSDict->declVisible()) || 
Packit Service 50c9f2
        (lde->kind()==LayoutDocEntry::NamespaceNestedNamespaces && namespaceSDict && namespaceSDict->declVisible())
Packit Service 50c9f2
       )
Packit Service 50c9f2
    {
Packit Service 50c9f2
      LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit Service 50c9f2
      QCString label = lde->kind()==LayoutDocEntry::NamespaceClasses ? "nested-classes" : "namespaces";
Packit Service 50c9f2
      ol.writeSummaryLink(0,label,ls->title(lang),first);
Packit Service 50c9f2
      first=FALSE;
Packit Service 50c9f2
    }
Packit Service 50c9f2
    else if (lde->kind()== LayoutDocEntry::MemberDecl)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
Packit Service 50c9f2
      MemberList * ml = getMemberList(lmd->type);
Packit Service 50c9f2
      if (ml && ml->declVisible())
Packit Service 50c9f2
      {
Packit Service 50c9f2
        ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
Packit Service 50c9f2
        first=FALSE;
Packit Service 50c9f2
      }
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  if (!first)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    ol.writeString("  \n");
Packit Service 50c9f2
  }
Packit Service 50c9f2
  ol.popGeneratorState();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addNamespaceAttributes(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  // UNO IDL constant groups may be published
Packit Service 50c9f2
  if (getLanguage()==SrcLangExt_IDL && isConstantGroup() && m_isPublished)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    ol.pushGeneratorState();
Packit Service 50c9f2
    ol.disableAllBut(OutputGenerator::Html);
Packit Service 50c9f2
    ol.startLabels();
Packit Service 50c9f2
    ol.writeLabel("published",false);
Packit Service 50c9f2
    ol.endLabels();
Packit Service 50c9f2
    ol.popGeneratorState();
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeDocumentation(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
Packit Service 50c9f2
  //static bool outputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
Packit Service 50c9f2
  //static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit Service 50c9f2
Packit Service 50c9f2
  QCString pageTitle = title();
Packit Service 50c9f2
  startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
Packit Service 50c9f2
Packit Service 50c9f2
  if (!generateTreeView)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (getOuterScope()!=Doxygen::globalScope)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      writeNavigationPath(ol);
Packit Service 50c9f2
    }
Packit Service 50c9f2
    ol.endQuickIndices();
Packit Service 50c9f2
  }
Packit Service 50c9f2
Packit Service 50c9f2
  startTitle(ol,getOutputFileBase(),this);
Packit Service 50c9f2
  ol.parseText(pageTitle);
Packit Service 50c9f2
  addGroupListToTitle(ol,this);
Packit Service 50c9f2
  addNamespaceAttributes(ol);
Packit Service 50c9f2
  endTitle(ol,getOutputFileBase(),displayName());
Packit Service 50c9f2
  ol.startContents();
Packit Service 50c9f2
  
Packit Service 50c9f2
  if (Doxygen::searchIndex)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    Doxygen::searchIndex->setCurrentDoc(this,anchor(),FALSE);
Packit Service 50c9f2
    Doxygen::searchIndex->addWord(localName(),TRUE);
Packit Service 50c9f2
  }
Packit Service 50c9f2
Packit Service 50c9f2
  Doxygen::indexList->addIndexItem(this,0);
Packit Service 50c9f2
Packit Service 50c9f2
  //---------------------------------------- start flexible part -------------------------------
Packit Service 50c9f2
Packit Service 50c9f2
  SrcLangExt lang = getLanguage();
Packit Service 50c9f2
  QListIterator<LayoutDocEntry> eli(
Packit Service 50c9f2
      LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
Packit Service 50c9f2
  LayoutDocEntry *lde;
Packit Service 50c9f2
  for (eli.toFirst();(lde=eli.current());++eli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    switch (lde->kind())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      case LayoutDocEntry::BriefDesc: 
Packit Service 50c9f2
        writeBriefDescription(ol);
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::MemberDeclStart: 
Packit Service 50c9f2
        startMemberDeclarations(ol);
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::NamespaceClasses: 
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit Service 50c9f2
          writeClassDeclarations(ol,ls->title(lang));
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::NamespaceNestedNamespaces: 
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit Service 50c9f2
          writeNamespaceDeclarations(ol,ls->title(lang),false);
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::NamespaceNestedConstantGroups:
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit Service 50c9f2
          writeNamespaceDeclarations(ol,ls->title(lang),true);
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::MemberGroups: 
Packit Service 50c9f2
        writeMemberGroups(ol);
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::MemberDecl: 
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
Packit Service 50c9f2
          writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::MemberDeclEnd: 
Packit Service 50c9f2
        endMemberDeclarations(ol);
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::DetailedDesc: 
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
Packit Service 50c9f2
          writeDetailedDescription(ol,ls->title(lang));
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::MemberDefStart: 
Packit Service 50c9f2
        startMemberDocumentation(ol);
Packit Service 50c9f2
        break; 
Packit Service 50c9f2
      case LayoutDocEntry::NamespaceInlineClasses:
Packit Service 50c9f2
        writeInlineClasses(ol);
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::MemberDef: 
Packit Service 50c9f2
        {
Packit Service 50c9f2
          LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
Packit Service 50c9f2
          writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
Packit Service 50c9f2
        }
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::MemberDefEnd: 
Packit Service 50c9f2
        endMemberDocumentation(ol);
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::AuthorSection: 
Packit Service 50c9f2
        writeAuthorSection(ol);
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      case LayoutDocEntry::ClassIncludes:
Packit Service 50c9f2
      case LayoutDocEntry::ClassInheritanceGraph:
Packit Service 50c9f2
      case LayoutDocEntry::ClassNestedClasses:
Packit Service 50c9f2
      case LayoutDocEntry::ClassCollaborationGraph:
Packit Service 50c9f2
      case LayoutDocEntry::ClassAllMembersLink:
Packit Service 50c9f2
      case LayoutDocEntry::ClassUsedFiles:
Packit Service 50c9f2
      case LayoutDocEntry::ClassInlineClasses:
Packit Service 50c9f2
      case LayoutDocEntry::FileClasses:
Packit Service 50c9f2
      case LayoutDocEntry::FileNamespaces:
Packit Service 50c9f2
      case LayoutDocEntry::FileConstantGroups:
Packit Service 50c9f2
      case LayoutDocEntry::FileIncludes:
Packit Service 50c9f2
      case LayoutDocEntry::FileIncludeGraph:
Packit Service 50c9f2
      case LayoutDocEntry::FileIncludedByGraph: 
Packit Service 50c9f2
      case LayoutDocEntry::FileSourceLink:
Packit Service 50c9f2
      case LayoutDocEntry::FileInlineClasses:
Packit Service 50c9f2
      case LayoutDocEntry::GroupClasses: 
Packit Service 50c9f2
      case LayoutDocEntry::GroupInlineClasses: 
Packit Service 50c9f2
      case LayoutDocEntry::GroupNamespaces:
Packit Service 50c9f2
      case LayoutDocEntry::GroupDirs: 
Packit Service 50c9f2
      case LayoutDocEntry::GroupNestedGroups: 
Packit Service 50c9f2
      case LayoutDocEntry::GroupFiles:
Packit Service 50c9f2
      case LayoutDocEntry::GroupGraph: 
Packit Service 50c9f2
      case LayoutDocEntry::GroupPageDocs:
Packit Service 50c9f2
      case LayoutDocEntry::DirSubDirs:
Packit Service 50c9f2
      case LayoutDocEntry::DirFiles:
Packit Service 50c9f2
      case LayoutDocEntry::DirGraph:
Packit Service 50c9f2
        err("Internal inconsistency: member %d should not be part of "
Packit Service 50c9f2
            "LayoutDocManager::Namespace entry list\n",lde->kind());
Packit Service 50c9f2
        break;
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
Packit Service 50c9f2
  //---------------------------------------- end flexible part -------------------------------
Packit Service 50c9f2
Packit Service 50c9f2
  ol.endContents();
Packit Service 50c9f2
Packit Service 50c9f2
  endFileWithNavPath(this,ol);
Packit Service 50c9f2
Packit Service 50c9f2
  if (Config_getBool(SEPARATE_MEMBER_PAGES))
Packit Service 50c9f2
  {
Packit Service 50c9f2
    MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit Service 50c9f2
    if (allMemberList) allMemberList->sort();
Packit Service 50c9f2
    writeMemberPages(ol);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeMemberPages(OutputList &ol)
Packit Service 50c9f2
{
Packit Service 50c9f2
  ol.pushGeneratorState();
Packit Service 50c9f2
  ol.disableAllBut(OutputGenerator::Html);
Packit Service 50c9f2
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->listType()&MemberListType_documentationLists)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ml->writeDocumentationPage(ol,displayName(),this);
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  ol.popGeneratorState();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
Packit Service 50c9f2
{
Packit Service 50c9f2
  static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
Packit Service 50c9f2
Packit Service 50c9f2
  ol.writeString("      
\n");
Packit Service 50c9f2
  ol.writeString("        \n");
Packit Service 50c9f2
Packit Service 50c9f2
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit Service 50c9f2
  if (allMemberList)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    MemberListIterator mli(*allMemberList);
Packit Service 50c9f2
    MemberDef *md;
Packit Service 50c9f2
    for (mli.toFirst();(md=mli.current());++mli)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      if (md->getNamespaceDef()==this && md->isLinkable() && !md->isEnumValue())
Packit Service 50c9f2
      {
Packit Service 50c9f2
        ol.writeString("          ");
Packit Service 50c9f2
        if (md->isLinkableInProject())
Packit Service 50c9f2
        {
Packit Service 50c9f2
          if (md==currentMd) // selected item => highlight
Packit Service 50c9f2
          {
Packit Service 50c9f2
            ol.writeString("
Packit Service 50c9f2
          }
Packit Service 50c9f2
          else
Packit Service 50c9f2
          {
Packit Service 50c9f2
            ol.writeString("
Packit Service 50c9f2
          }
Packit Service 50c9f2
          ol.writeString("href=\"");
Packit Service 50c9f2
          if (createSubDirs) ol.writeString("../../");
Packit Service 50c9f2
          ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
Packit Service 50c9f2
          ol.writeString("\">");
Packit Service 50c9f2
          ol.writeString(convertToHtml(md->localName()));
Packit Service 50c9f2
          ol.writeString("");
Packit Service 50c9f2
        }
Packit Service 50c9f2
        ol.writeString("\n");
Packit Service 50c9f2
      }
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
Packit Service 50c9f2
  ol.writeString("        \n");
Packit Service 50c9f2
  ol.writeString("      \n");
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
int NamespaceDef::countMembers()
Packit Service 50c9f2
{
Packit Service 50c9f2
  MemberList *allMemberList = getMemberList(MemberListType_allMembersList);
Packit Service 50c9f2
  if (allMemberList) allMemberList->countDocMembers();
Packit Service 50c9f2
  return (allMemberList ? allMemberList->numDocMembers() : 0)+classSDict->count();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addUsingDirective(NamespaceDef *nd)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (usingDirList==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    usingDirList = new NamespaceSDict;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  if (usingDirList->find(nd->qualifiedName())==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    usingDirList->append(nd->qualifiedName(),nd);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  //printf("%p: NamespaceDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
NamespaceSDict *NamespaceDef::getUsedNamespaces() const 
Packit Service 50c9f2
{ 
Packit Service 50c9f2
  //printf("%p: NamespaceDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
Packit Service 50c9f2
  return usingDirList; 
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addUsingDeclaration(Definition *d)
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (usingDeclList==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    usingDeclList = new SDict<Definition>(17);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  if (usingDeclList->find(d->qualifiedName())==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    usingDeclList->append(d->qualifiedName(),d);
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
QCString NamespaceDef::getOutputFileBase() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  return fileName;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
Definition *NamespaceDef::findInnerCompound(const char *n) const
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (n==0) return 0;
Packit Service 50c9f2
  Definition *d = m_innerCompounds->find(n);
Packit Service 50c9f2
  if (d==0)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (usingDirList)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      d = usingDirList->find(n);
Packit Service 50c9f2
    }
Packit Service 50c9f2
    if (d==0 && usingDeclList)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      d = usingDeclList->find(n);
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return d;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addListReferences()
Packit Service 50c9f2
{
Packit Service 50c9f2
  //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit Service 50c9f2
  {
Packit Service 50c9f2
    QList<ListItemInfo> *xrefItems = xrefListItems();
Packit Service 50c9f2
    addRefItem(xrefItems,
Packit Service 50c9f2
        qualifiedName(),
Packit Service 50c9f2
        getLanguage()==SrcLangExt_Fortran ? 
Packit Service 50c9f2
          theTranslator->trModule(TRUE,TRUE) : 
Packit Service 50c9f2
          theTranslator->trNamespace(TRUE,TRUE),
Packit Service 50c9f2
        getOutputFileBase(),displayName(),
Packit Service 50c9f2
        0,
Packit Service 50c9f2
        this
Packit Service 50c9f2
        );
Packit Service 50c9f2
  }
Packit Service 50c9f2
  MemberGroupSDict::Iterator mgli(*memberGroupSDict);
Packit Service 50c9f2
  MemberGroup *mg;
Packit Service 50c9f2
  for (;(mg=mgli.current());++mgli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    mg->addListReferences(this);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->listType()&MemberListType_documentationLists)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      ml->addListReferences(this);
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
QCString NamespaceDef::displayName(bool includeScope) const
Packit Service 50c9f2
{
Packit Service 50c9f2
  QCString result=includeScope ? name() : localName();
Packit Service 50c9f2
  SrcLangExt lang = getLanguage();
Packit Service 50c9f2
  QCString sep = getLanguageSpecificSeparator(lang);
Packit Service 50c9f2
  if (sep!="::")
Packit Service 50c9f2
  {
Packit Service 50c9f2
    result = substitute(result,"::",sep);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  //printf("NamespaceDef::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
Packit Service 50c9f2
  return result; 
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
QCString NamespaceDef::localName() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  QCString result=name();
Packit Service 50c9f2
  int i=result.findRev("::");
Packit Service 50c9f2
  if (i!=-1)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    result=result.mid(i+2);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return result;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::combineUsingRelations()
Packit Service 50c9f2
{
Packit Service 50c9f2
  if (visited) return; // already done
Packit Service 50c9f2
  visited=TRUE;
Packit Service 50c9f2
  if (usingDirList)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    NamespaceSDict::Iterator nli(*usingDirList);
Packit Service 50c9f2
    NamespaceDef *nd;
Packit Service 50c9f2
    for (nli.toFirst();(nd=nli.current());++nli)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      nd->combineUsingRelations();
Packit Service 50c9f2
    }
Packit Service 50c9f2
    for (nli.toFirst();(nd=nli.current());++nli)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      // add used namespaces of namespace nd to this namespace
Packit Service 50c9f2
      if (nd->getUsedNamespaces())
Packit Service 50c9f2
      {
Packit Service 50c9f2
        NamespaceSDict::Iterator unli(*nd->getUsedNamespaces());
Packit Service 50c9f2
        NamespaceDef *und;
Packit Service 50c9f2
        for (unli.toFirst();(und=unli.current());++unli)
Packit Service 50c9f2
        {
Packit Service 50c9f2
          //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data());
Packit Service 50c9f2
          addUsingDirective(und);
Packit Service 50c9f2
        }
Packit Service 50c9f2
      }
Packit Service 50c9f2
      // add used classes of namespace nd to this namespace
Packit Service 50c9f2
      if (nd->getUsedClasses())
Packit Service 50c9f2
      {
Packit Service 50c9f2
        SDict<Definition>::Iterator cli(*nd->getUsedClasses());
Packit Service 50c9f2
        Definition *ucd;
Packit Service 50c9f2
        for (cli.toFirst();(ucd=cli.current());++cli)
Packit Service 50c9f2
        {
Packit Service 50c9f2
          //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data());
Packit Service 50c9f2
          addUsingDeclaration(ucd);
Packit Service 50c9f2
        }
Packit Service 50c9f2
      }
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
bool NamespaceSDict::declVisible() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  SDict<NamespaceDef>::Iterator ni(*this);
Packit Service 50c9f2
  NamespaceDef *nd;
Packit Service 50c9f2
  for (ni.toFirst();(nd=ni.current());++ni)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (nd->isLinkable())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      return TRUE;
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return FALSE;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,
Packit Service 50c9f2
        bool const isConstantGroup,bool localName)
Packit Service 50c9f2
{
Packit Service 50c9f2
 
Packit Service 50c9f2
Packit Service 50c9f2
  if (count()==0) return; // no namespaces in the list
Packit Service 50c9f2
Packit Service 50c9f2
  if (Config_getBool(OPTIMIZE_OUTPUT_VHDL)) return;
Packit Service 50c9f2
 
Packit Service 50c9f2
Packit Service 50c9f2
  SDict<NamespaceDef>::Iterator ni(*this);
Packit Service 50c9f2
  NamespaceDef *nd;
Packit Service 50c9f2
  bool found=FALSE;
Packit Service 50c9f2
  for (ni.toFirst();(nd=ni.current()) && !found;++ni)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (nd->isLinkable())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      SrcLangExt lang = nd->getLanguage();
Packit Service 50c9f2
      if (SrcLangExt_IDL==lang)
Packit Service 50c9f2
      {
Packit Service 50c9f2
        if (isConstantGroup == nd->isConstantGroup())
Packit Service 50c9f2
        {
Packit Service 50c9f2
          found=TRUE;
Packit Service 50c9f2
          break;
Packit Service 50c9f2
        }
Packit Service 50c9f2
      }
Packit Service 50c9f2
      else if (!isConstantGroup) // ensure we only get extra section in IDL
Packit Service 50c9f2
      {
Packit Service 50c9f2
        if (nd->isConstantGroup())
Packit Service 50c9f2
        {
Packit Service 50c9f2
          err("Internal inconsistency: constant group but not IDL?\n");
Packit Service 50c9f2
        }
Packit Service 50c9f2
        found=TRUE;
Packit Service 50c9f2
        break;
Packit Service 50c9f2
      }
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  if (!found) return; // no linkable namespaces in the list
Packit Service 50c9f2
Packit Service 50c9f2
  // write list of namespaces
Packit Service 50c9f2
  ol.startMemberHeader("namespaces");
Packit Service 50c9f2
  //bool javaOpt    = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
Packit Service 50c9f2
  //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit Service 50c9f2
  ol.parseText(title);
Packit Service 50c9f2
  ol.endMemberHeader();
Packit Service 50c9f2
  ol.startMemberList();
Packit Service 50c9f2
  for (ni.toFirst();(nd=ni.current());++ni)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (nd->isLinkable() && nd->hasDocumentation())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      SrcLangExt lang = nd->getLanguage();
Packit Service 50c9f2
      if (lang==SrcLangExt_IDL && (isConstantGroup != nd->isConstantGroup()))
Packit Service 50c9f2
          continue; // will be output in another pass, see layout_default.xml
Packit Service 50c9f2
      ol.startMemberDeclaration();
Packit Service 50c9f2
      ol.startMemberItem(nd->getOutputFileBase(),0);
Packit Service 50c9f2
      QCString ct = nd->compoundTypeString();
Packit Service 50c9f2
      ol.docify(ct);
Packit Service 50c9f2
      ol.docify(" ");
Packit Service 50c9f2
      ol.insertMemberAlign();
Packit Service 50c9f2
      QCString name;
Packit Service 50c9f2
      if (localName)
Packit Service 50c9f2
      {
Packit Service 50c9f2
        name = nd->localName();
Packit Service 50c9f2
      }
Packit Service 50c9f2
      else
Packit Service 50c9f2
      {
Packit Service 50c9f2
        name = nd->displayName();
Packit Service 50c9f2
      }
Packit Service 50c9f2
      ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
Packit Service 50c9f2
      ol.endMemberItem();
Packit Service 50c9f2
      if (!nd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
Packit Service 50c9f2
      {
Packit Service 50c9f2
        ol.startMemberDescription(nd->getOutputFileBase());
Packit Service 50c9f2
        ol.generateDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
Packit Service 50c9f2
        ol.endMemberDescription();
Packit Service 50c9f2
      }
Packit Service 50c9f2
      ol.endMemberDeclaration(0,0);
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  ol.endMemberList();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
MemberList *NamespaceDef::createMemberList(MemberListType lt)
Packit Service 50c9f2
{
Packit Service 50c9f2
  m_memberLists.setAutoDelete(TRUE);
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->listType()==lt)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      return ml;
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  // not found, create a new member list
Packit Service 50c9f2
  ml = new MemberList(lt);
Packit Service 50c9f2
  m_memberLists.append(ml);
Packit Service 50c9f2
  return ml;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::addMemberToList(MemberListType lt,MemberDef *md)
Packit Service 50c9f2
{
Packit Service 50c9f2
  static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
Packit Service 50c9f2
  static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
Packit Service 50c9f2
  MemberList *ml = createMemberList(lt);
Packit Service 50c9f2
  ml->setNeedsSorting(
Packit Service 50c9f2
      ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) ||
Packit Service 50c9f2
      ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs));
Packit Service 50c9f2
  ml->append(md);
Packit Service 50c9f2
Packit Service 50c9f2
#if 0
Packit Service 50c9f2
  if (ml->needsSorting())
Packit Service 50c9f2
    ml->inSort(md);
Packit Service 50c9f2
  else
Packit Service 50c9f2
    ml->append(md);
Packit Service 50c9f2
#endif
Packit Service 50c9f2
Packit Service 50c9f2
  if (ml->listType()&MemberListType_declarationLists) md->setSectionList(this,ml);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::sortMemberLists()
Packit Service 50c9f2
{
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  if (classSDict)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    classSDict->sort();
Packit Service 50c9f2
  }
Packit Service 50c9f2
  if (namespaceSDict)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    namespaceSDict->sort();
Packit Service 50c9f2
  }
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
MemberList *NamespaceDef::getMemberList(MemberListType lt) const
Packit Service 50c9f2
{
Packit Service 50c9f2
  QListIterator<MemberList> mli(m_memberLists);
Packit Service 50c9f2
  MemberList *ml;
Packit Service 50c9f2
  for (mli.toFirst();(ml=mli.current());++mli)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (ml->listType()==lt)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      return ml;
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return 0;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title)
Packit Service 50c9f2
{
Packit Service 50c9f2
  MemberList * ml = getMemberList(lt);
Packit Service 50c9f2
  if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title)
Packit Service 50c9f2
{
Packit Service 50c9f2
  MemberList * ml = getMemberList(lt);
Packit Service 50c9f2
  if (ml) ml->writeDocumentation(ol,displayName(),this,title);
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
bool NamespaceDef::isLinkableInProject() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  int i = name().findRev("::");
Packit Service 50c9f2
  if (i==-1) i=0; else i+=2;
Packit Service 50c9f2
  static bool extractAnonNs = Config_getBool(EXTRACT_ANON_NSPACES);
Packit Service 50c9f2
  if (extractAnonNs &&                             // extract anonymous ns
Packit Service 50c9f2
      name().mid(i,20)=="anonymous_namespace{"     // correct prefix
Packit Service 50c9f2
     )                                             // not disabled by config
Packit Service 50c9f2
  {
Packit Service 50c9f2
    return TRUE;
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return !name().isEmpty() && name().at(i)!='@' && // not anonymous
Packit Service 50c9f2
    (hasDocumentation() || getLanguage()==SrcLangExt_CSharp) &&  // documented
Packit Service 50c9f2
    !isReference() &&      // not an external reference
Packit Service 50c9f2
    !isHidden() &&         // not hidden
Packit Service 50c9f2
    !isArtificial();       // or artificial
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
bool NamespaceDef::isLinkable() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  return isLinkableInProject() || isReference();
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
Packit Service 50c9f2
{
Packit Service 50c9f2
  MemberDef *md = 0;
Packit Service 50c9f2
  if (m_allMembersDict && !n.isEmpty())
Packit Service 50c9f2
  {
Packit Service 50c9f2
    md = m_allMembersDict->find(n);
Packit Service 50c9f2
    //printf("%s::m_allMembersDict->find(%s)=%p\n",name().data(),n.data(),md);
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return md;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
QCString NamespaceDef::title() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  SrcLangExt lang = getLanguage();
Packit Service 50c9f2
  QCString pageTitle;
Packit Service 50c9f2
  if (lang==SrcLangExt_Java)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    pageTitle = theTranslator->trPackage(displayName());
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (lang==SrcLangExt_Fortran)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    pageTitle = theTranslator->trModuleReference(displayName());
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (lang==SrcLangExt_IDL)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    pageTitle = isConstantGroup()
Packit Service 50c9f2
        ? theTranslator->trConstantGroupReference(displayName())
Packit Service 50c9f2
        : theTranslator->trModuleReference(displayName());
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else
Packit Service 50c9f2
  {
Packit Service 50c9f2
    pageTitle = theTranslator->trNamespaceReference(displayName());
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return pageTitle;
Packit Service 50c9f2
}
Packit Service 50c9f2
Packit Service 50c9f2
QCString NamespaceDef::compoundTypeString() const
Packit Service 50c9f2
{
Packit Service 50c9f2
  SrcLangExt lang = getLanguage();
Packit Service 50c9f2
  if (lang==SrcLangExt_Java)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    return "package";
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if(lang==SrcLangExt_CSharp)
Packit Service 50c9f2
  {
Packit Service 50c9f2
	return "namespace";
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (lang==SrcLangExt_Fortran)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    return "module";
Packit Service 50c9f2
  }
Packit Service 50c9f2
  else if (lang==SrcLangExt_IDL)
Packit Service 50c9f2
  {
Packit Service 50c9f2
    if (isModule())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      return "module";
Packit Service 50c9f2
    }
Packit Service 50c9f2
    else if (isConstantGroup())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      return "constants";
Packit Service 50c9f2
    }
Packit Service 50c9f2
    else if (isLibrary())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      return "library";
Packit Service 50c9f2
    }
Packit Service 50c9f2
    else
Packit Service 50c9f2
    {
Packit Service 50c9f2
      err_full(getDefFileName(),getDefLine(),"Internal inconsistency: namespace in IDL not module, library or constant group");
Packit Service 50c9f2
    }
Packit Service 50c9f2
  }
Packit Service 50c9f2
  return "";
Packit Service 50c9f2
}
Packit Service 50c9f2