summaryrefslogtreecommitdiffstats
path: root/src/packagedef.cpp
blob: c6a8bfb146919cb03ecedc5a05e8c0cc1cac37a8 (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
/******************************************************************************
 *
 * 
 *
 * Copyright (C) 1997-2001 by Dimitri van Heesch.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
 *
 */

#include <ctype.h>
#include "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)
{
  classList       = new ClassList;
  packageFileName = "package_"+convertFileName(na);
  setReference(ref);
}

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

void PackageDef::addClass(const ClassDef *def)
{
  if (Config::instance()->getBool("SORT_MEMBER_DOCS"))
    classList->inSort(def);
  else
    classList->append(def);
}

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

  OutputList briefOutput(&ol);
  if (!briefDescription().isEmpty())
  {
    parseDoc(briefOutput,defFileName,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::instance()->getString("GENERATE_TAGFILE").isEmpty())
  {
    Doxygen::tagFile << "  <compound kind=\"package\">" << endl;
  }
  
  ol.startMemberSections();
  ClassDef::CompoundType ct;
  ct=ClassDef::Interface;
  classList->writeDeclaration(ol,&ct,theTranslator->trInterfaces());
  ct=ClassDef::Class;
  classList->writeDeclaration(ol,&ct,theTranslator->trClasses());
  ol.endMemberSections();

  if (!Config::instance()->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::instance()->getBool("REPEAT_BRIEF"))
    {
      ol+=briefOutput;
      ol.newParagraph();
    }

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

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