Imported Upstream version 1.8.15
[platform/upstream/doxygen.git] / src / doxygen.h
1 /******************************************************************************
2  *
3  * Copyright (C) 1997-2015 by Dimitri van Heesch.
4  *
5  * Permission to use, copy, modify, and distribute this software and its
6  * documentation under the terms of the GNU General Public License is hereby
7  * granted. No representations are made about the suitability of this software
8  * for any purpose. It is provided "as is" without express or implied warranty.
9  * See the GNU General Public License for more details.
10  *
11  * Documents produced by Doxygen are derivative works derived from the
12  * input used in their production; they are not affected by this license.
13  *
14  */
15
16 #ifndef DOXYGEN_H
17 #define DOXYGEN_H
18
19 #include <qdatetime.h>
20 #include <qcache.h>
21 #include <qstrlist.h>
22 #include <qdict.h>
23 #include <qintdict.h>
24
25 #include "ftextstream.h"
26 #include "sortdict.h"
27 #include "membergroup.h"
28 #include "dirdef.h"
29 #include "memberlist.h"
30
31 class RefList;
32 class PageSList;
33 class PageSDict;
34 class PageDef;
35 class SearchIndexIntf;
36 class ParserManager;
37 class ObjCache;
38 class Store;
39 class QFileInfo;
40 class BufStr;
41 class CiteDict;
42 class MemberDef;
43 class GroupDef;
44 class GroupSDict;
45 class FileDef;
46 class ClassDef;
47 class ClassSDict;
48 class GenericsSDict;
49 class MemberNameSDict;
50 class FileNameDict;
51 class FileNameList;
52 class NamespaceSDict;
53 class NamespaceDef;
54 class DefinitionIntf;
55 class DirSDict;
56 class DirRelation;
57 class IndexList;
58 class FormulaList;
59 class FormulaDict;
60 class FormulaNameDict;
61 class SectionDict;
62 struct MemberGroupInfo;
63
64 typedef QList<QCString>    StringList;
65 typedef QListIterator<QCString>    StringListIterator;
66 //typedef QDict<FileDef>     FileDict;
67 //typedef QDict<GroupDef>    GroupDict;
68
69 class StringDict : public QDict<QCString>
70 {
71   public:
72     StringDict(uint size=17) : QDict<QCString>(size) {}
73     virtual ~StringDict() {}
74 };
75
76 struct LookupInfo
77 {
78   LookupInfo() : classDef(0), typeDef(0) {}
79   LookupInfo(ClassDef *cd,MemberDef *td,QCString ts,QCString rt)
80     : classDef(cd), typeDef(td), templSpec(ts),resolvedType(rt) {}
81   ClassDef  *classDef;
82   MemberDef *typeDef;
83   QCString   templSpec;
84   QCString   resolvedType;
85 };
86
87 extern QCString g_spaces;
88
89 /*! \brief This class serves as a namespace for global variables used by doxygen.
90  *
91  *  All fields in this class are public and static, so they can be used directly.
92  */
93 class Doxygen
94 {
95   public:
96     static ClassSDict               *classSDict;
97     static ClassSDict               *hiddenClasses;
98     static PageSDict                *exampleSDict;
99     static PageSDict                *pageSDict;
100     static PageDef                  *mainPage;
101     static bool                      insideMainPage;
102     static FileNameDict             *includeNameDict;
103     static FileNameDict             *exampleNameDict;
104     static QDict<void>               inputPaths;
105     static FileNameDict             *inputNameDict;
106     static FileNameList             *inputNameList;
107     static FileNameDict             *imageNameDict;
108     static FileNameDict             *dotFileNameDict;
109     static FileNameDict             *mscFileNameDict;
110     static FileNameDict             *diaFileNameDict;
111     static QStrList                  tagfileList;
112     static MemberNameSDict          *memberNameSDict;
113     static MemberNameSDict          *functionNameSDict;
114     static SectionDict              *sectionDict;
115     static StringDict                namespaceAliasDict;
116     static GroupSDict               *groupSDict;
117     static NamespaceSDict           *namespaceSDict;
118     static FormulaList              *formulaList;
119     static FormulaDict              *formulaDict;
120     static FormulaDict              *formulaNameDict;
121     static StringDict                tagDestinationDict;
122     static StringDict                aliasDict;
123     static QIntDict<MemberGroupInfo> memGrpInfoDict;
124     static QDict<void>               expandAsDefinedDict;
125     static NamespaceDef             *globalScope;
126     static QDict<RefList>           *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
127     static QCString                  htmlFileExtension;
128     static bool                      parseSourcesNeeded;
129     static QTime                     runningTime;
130     static SearchIndexIntf          *searchIndex;
131     static QDict<DefinitionIntf>    *symbolMap;
132     static QDict<Definition>        *clangUsrMap;
133     static bool                      outputToWizard;
134     static QDict<int>               *htmlDirMap;
135     static QCache<LookupInfo>       *lookupCache;
136     static DirSDict                 *directories;
137     static SDict<DirRelation>        dirRelations;
138     static ParserManager            *parserManager;
139     static bool                      suppressDocWarnings;
140     static Store                    *symbolStorage;
141     static QCString                  objDBFileName;
142     static QCString                  entryDBFileName;
143     static QCString                  filterDBFileName;
144     static CiteDict                 *citeDict;
145     static bool                      gatherDefines;
146     static bool                      userComments;
147     static IndexList                *indexList;
148     static int                       subpageNestingLevel;
149     static QCString                  spaces;
150     static bool                      generatingXmlOutput;
151     static bool                      markdownSupport;
152     static GenericsSDict            *genericsDict;
153 };
154
155 void initDoxygen();
156 void readConfiguration(int argc, char **argv);
157 void checkConfiguration();
158 void adjustConfiguration();
159 void searchInputFiles(StringList &inputFiles);
160 void parseInput();
161 void generateOutput();
162 void readAliases();
163 void readFormulaRepository(QCString dir, bool cmp = FALSE);
164 void cleanUpDoxygen();
165 int readFileOrDirectory(const char *s,
166                         FileNameList *fnList,
167                         FileNameDict *fnDict,
168                         StringDict *exclDict,
169                         QStrList *patList,
170                         QStrList *exclPatList,
171                         StringList *resultList,
172                         StringDict *resultDict,
173                         bool recursive,
174                         bool errorIfNotExist=TRUE,
175                         QDict<void> *killDict = 0,
176                         QDict<void> *paths = 0
177                        );
178 int readDir(QFileInfo *fi,
179             FileNameList *fnList,
180             FileNameDict *fnDict,
181             StringDict  *exclDict,
182             QStrList *patList,
183             QStrList *exclPatList,
184             StringList *resultList,
185             StringDict *resultDict,
186             bool errorIfNotExist,
187             bool recursive,
188             QDict<void> *killDict
189            );
190 void copyAndFilterFile(const char *fileName,BufStr &dest);
191
192 #endif