summaryrefslogtreecommitdiffstats
path: root/src/packagedef.cpp
blob: afd8709603de2f92d44bbbe12d793e9e8ff45082 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/******************************************************************************
 *
 * 
 *
 * Copyright (C) 1997-2002 by Dimitri van Heesch.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
 *
 */

#include <ctype.h>
#include "packagedef.h"
#include "qtbc.h"
#include "classdef.h"
#include "classlist.h"
#include "outputlist.h"
#include "util.h"
#include "config.h"
#include "doc.h"
#include "language.h"
#include "doxygen.h"

PackageDef::PackageDef(const char *df,int dl,const char *na,const char *ref) : 
   Definition(df,dl,na)
{
  classSDict       = new ClassSDict(17);
  packageFileName = (QCString)"package_"+na;
  setReference(ref);
}

PackageDef::~PackageDef()
{
  delete classSDict;
}

void PackageDef::addClass(const ClassDef *cd)
{
  if (Config_getBool("SORT_MEMBER_DOCS"))
    classSDict->inSort(cd->name(),cd);
  else
    classSDict->append(cd->name(),cd);
}

void PackageDef::writeDocumentation(OutputList &ol)
{
  QCString title = theTranslator->trPackage(name());
  ol.pushGeneratorState();
  ol.disable(OutputGenerator::Man);
  startFile(ol,getOutputFileBase(),name(),title);
  startTitle(ol,getOutputFileBase());
  ol.docify(title);
  endTitle(ol,getOutputFileBase(),title);

  OutputList briefOutput(&ol);
  if (!briefDescription().isEmpty())
  {
    parseDoc(briefOutput,m_defFileName,m_defLine,name(),0,briefDescription());
    ol+=briefOutput;
    ol.writeString(" \n");
    ol.pushGeneratorState();
    ol.disable(OutputGenerator::Latex);
    ol.disable(OutputGenerator::RTF);
    ol.startTextLink(0,"_details");
    parseText(ol,theTranslator->trMore());
    ol.endTextLink();
    ol.popGeneratorState();
  }

  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
  {
    Doxygen::tagFile << "  <compound kind=\"package\">" << endl;
  }
  
  ol.startMemberSections();
  ClassDef::CompoundType ct;
  ct=ClassDef::Interface;
  classSDict->writeDeclaration(ol,&ct,theTranslator->trInterfaces());
  ct=ClassDef::Class;
  classSDict->writeDeclaration(ol,&ct,theTranslator->trClasses());
  ol.endMemberSections();

  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
  {
    writeDocAnchorsToTagFile();
    Doxygen::tagFile << "  </compound>" << endl;
  }
  
  if (!briefDescription().isEmpty() || !documentation().isEmpty())
  {
    ol.writeRuler();
    ol.pushGeneratorState();
    ol.disable(OutputGenerator::Latex);
    ol.disable(OutputGenerator::RTF);
    ol.writeAnchor(0,"_details");
    ol.popGeneratorState();
    ol.startGroupHeader();
    parseText(ol,theTranslator->trDetailedDescription());
    ol.endGroupHeader();

    // repeat brief description
    if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
    {
      ol+=briefOutput;
      ol.newParagraph();
    }

    // write documentation
    if (!documentation().isEmpty())
    {
      parseDoc(ol,m_defFileName,m_defLine,name(),0,documentation()+"\n");
    }
  }

  endFile(ol); 
  ol.popGeneratorState();
}

QCString PackageDef::getOutputFileBase() const 
{ 
  return convertNameToFile(packageFileName); 
}