source: trunk/tools/qdoc3/htmlgenerator.h@ 618

Last change on this file since 618 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

File size: 12.4 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the tools applications of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*
43 htmlgenerator.h
44*/
45
46#ifndef HTMLGENERATOR_H
47#define HTMLGENERATOR_H
48
49#define QDOC_NAME_ALIGNMENT
50
51#include <qmap.h>
52#include <qregexp.h>
53
54#include "codemarker.h"
55#include "config.h"
56#include "dcfsection.h"
57#include "pagegenerator.h"
58
59QT_BEGIN_NAMESPACE
60
61#if 0
62struct NavigationBar
63{
64 SectionIterator prev;
65 SectionIterator current;
66 SectionIterator next;
67};
68#endif
69
70typedef QMultiMap<QString, Node*> NodeMultiMap;
71typedef QMap<QString, NodeMultiMap> NewSinceMaps;
72typedef QMap<Node*, NodeMultiMap> ParentMaps;
73typedef QMap<QString, const Node*> NodeMap;
74typedef QMap<QString, NodeMap> NewClassMaps;
75
76class HelpProjectWriter;
77
78class HtmlGenerator : public PageGenerator
79{
80 public:
81 enum SinceType {
82 Namespace,
83 Class,
84 MemberFunction,
85 NamespaceFunction,
86 GlobalFunction,
87 Macro,
88 Enum,
89 Typedef,
90 Property,
91 Variable,
92 QmlProperty,
93 QmlSignal,
94 QmlMethod,
95 LastSinceType
96 };
97
98 public:
99 HtmlGenerator();
100 ~HtmlGenerator();
101
102 virtual void initializeGenerator(const Config& config);
103 virtual void terminateGenerator();
104 virtual QString format();
105 virtual void generateTree(const Tree *tree, CodeMarker *marker);
106
107 static QString protect(const QString& string);
108 static QString cleanRef(const QString& ref);
109 static QString sinceTitle(int i) { return sinceTitles[i]; }
110
111 protected:
112 virtual void startText(const Node *relative, CodeMarker *marker);
113 virtual int generateAtom(const Atom *atom,
114 const Node *relative,
115 CodeMarker *marker);
116 virtual void generateClassLikeNode(const InnerNode *inner, CodeMarker *marker);
117 virtual void generateFakeNode(const FakeNode *fake, CodeMarker *marker);
118 virtual QString fileExtension(const Node *node);
119 virtual QString refForNode(const Node *node);
120 virtual QString linkForNode(const Node *node, const Node *relative);
121 virtual QString refForAtom(Atom *atom, const Node *node);
122
123 private:
124 enum SubTitleSize { SmallSubTitle, LargeSubTitle };
125
126 const QPair<QString,QString> anchorForNode(const Node *node);
127 const Node *findNodeForTarget(const QString &target,
128 const Node *relative,
129 CodeMarker *marker,
130 const Atom *atom = 0);
131 void generateHeader(const QString& title, const Node *node = 0,
132 CodeMarker *marker = 0, bool mainPage = true);
133 void generateTitle(const QString& title,
134 const Text &subTitle,
135 SubTitleSize subTitleSize,
136 const Node *relative,
137 CodeMarker *marker);
138 void generateFooter(const Node *node = 0);
139 void generateBrief(const Node *node,
140 CodeMarker *marker,
141 const Node *relative = 0);
142 void generateIncludes(const InnerNode *inner, CodeMarker *marker);
143#if 0
144 void generateNavigationBar(const NavigationBar& bar,
145 const Node *node,
146 CodeMarker *marker);
147#endif
148 void generateTableOfContents(const Node *node,
149 CodeMarker *marker,
150 Doc::SectioningUnit sectioningUnit,
151 int numColumns,
152 const Node *relative = 0);
153 QString generateListOfAllMemberFile(const InnerNode *inner, CodeMarker *marker);
154 QString generateLowStatusMemberFile(const InnerNode *inner,
155 CodeMarker *marker,
156 CodeMarker::Status status);
157 void generateClassHierarchy(const Node *relative,
158 CodeMarker *marker,
159 const NodeMap &classMap);
160 void generateAnnotatedList(const Node *relative,
161 CodeMarker *marker,
162 const NodeMap &nodeMap);
163 void generateCompactList(const Node *relative,
164 CodeMarker *marker,
165 const NodeMap &classMap,
166 QString commonPrefix = QString());
167 void generateFunctionIndex(const Node *relative, CodeMarker *marker);
168 void generateLegaleseList(const Node *relative, CodeMarker *marker);
169 void generateOverviewList(const Node *relative, CodeMarker *marker);
170 void generateSectionList(const Section& section,
171 const Node *relative,
172 CodeMarker *marker,
173 CodeMarker::SynopsisStyle style);
174#ifdef QDOC_QML
175 void generateQmlSummary(const Section& section,
176 const Node *relative,
177 CodeMarker *marker);
178 void generateQmlItem(const Node *node,
179 const Node *relative,
180 CodeMarker *marker,
181 bool summary);
182 void generateDetailedQmlMember(const Node *node,
183 const InnerNode *relative,
184 CodeMarker *marker);
185 void generateQmlInherits(const QmlClassNode* cn, CodeMarker* marker);
186 void generateQmlInstantiates(const QmlClassNode* qcn, CodeMarker* marker);
187 void generateInstantiatedBy(const ClassNode* cn, CodeMarker* marker);
188#endif
189#ifdef QDOC_NAME_ALIGNMENT
190 void generateSection(const NodeList& nl,
191 const Node *relative,
192 CodeMarker *marker,
193 CodeMarker::SynopsisStyle style);
194 void generateSynopsis(const Node *node,
195 const Node *relative,
196 CodeMarker *marker,
197 CodeMarker::SynopsisStyle style,
198 bool nameAlignment = false);
199 void generateSectionInheritedList(const Section& section,
200 const Node *relative,
201 CodeMarker *marker,
202 bool nameAlignment = false);
203 QString highlightedCode(const QString& markedCode,
204 CodeMarker *marker,
205 const Node *relative,
206 CodeMarker::SynopsisStyle style = CodeMarker::Accessors,
207 bool nameAlignment = false);
208#else
209 void generateSynopsis(const Node *node,
210 const Node *relative,
211 CodeMarker *marker,
212 CodeMarker::SynopsisStyle style);
213 void generateSectionInheritedList(const Section& section,
214 const Node *relative,
215 CodeMarker *marker);
216 QString highlightedCode(const QString& markedCode,
217 CodeMarker *marker,
218 const Node *relative);
219#endif
220 void generateFullName(const Node *apparentNode,
221 const Node *relative,
222 CodeMarker *marker,
223 const Node *actualNode = 0);
224 void generateDetailedMember(const Node *node,
225 const InnerNode *relative,
226 CodeMarker *marker);
227 void generateLink(const Atom *atom,
228 const Node *relative,
229 CodeMarker *marker);
230 void generateStatus(const Node *node, CodeMarker *marker);
231
232 QString registerRef(const QString& ref);
233 QString fileBase(const Node *node);
234#if 0
235 QString fileBase(const Node *node, const SectionIterator& section);
236#endif
237 QString fileName(const Node *node);
238 void findAllClasses(const InnerNode *node);
239 void findAllFunctions(const InnerNode *node);
240 void findAllLegaleseTexts(const InnerNode *node);
241 void findAllNamespaces(const InnerNode *node);
242#ifdef ZZZ_QDOC_QML
243 void findAllQmlClasses(const InnerNode *node);
244#endif
245 void findAllSince(const InnerNode *node);
246 static int hOffset(const Node *node);
247 static bool isThreeColumnEnumValueTable(const Atom *atom);
248 virtual QString getLink(const Atom *atom,
249 const Node *relative,
250 CodeMarker *marker,
251 const Node** node);
252 virtual void generateDcf(const QString &fileBase,
253 const QString &startPage,
254 const QString &title, DcfSection &dcfRoot);
255 virtual void generateIndex(const QString &fileBase,
256 const QString &url,
257 const QString &title);
258 void generateMacRef(const Node *node, CodeMarker *marker);
259 void beginLink(const QString &link,
260 const Node *node,
261 const Node *relative,
262 CodeMarker *marker);
263 void endLink();
264
265#if 0
266 NavigationBar currentNavigationBar;
267#endif
268 QMap<QString, QString> refMap;
269 int codeIndent;
270 DcfSection dcfClassesRoot;
271 DcfSection dcfOverviewsRoot;
272 DcfSection dcfExamplesRoot;
273 DcfSection dcfDesignerRoot;
274 DcfSection dcfLinguistRoot;
275 DcfSection dcfAssistantRoot;
276 DcfSection dcfQmakeRoot;
277 HelpProjectWriter *helpProjectWriter;
278 bool inLink;
279 bool inObsoleteLink;
280 bool inContents;
281 bool inSectionHeading;
282 bool inTableHeader;
283 int numTableRows;
284 bool threeColumnEnumValueTable;
285 QString link;
286 QStringList sectionNumber;
287 QRegExp funcLeftParen;
288 QString style;
289 QString postHeader;
290 QString footer;
291 QString address;
292 bool pleaseGenerateMacRef;
293 QString project;
294 QString projectDescription;
295 QString projectUrl;
296 QString navigationLinks;
297 QStringList stylesheets;
298 QStringList customHeadElements;
299 const Tree *myTree;
300 bool slow;
301 bool obsoleteLinks;
302 QMap<QString, NodeMap > moduleClassMap;
303 QMap<QString, NodeMap > moduleNamespaceMap;
304 NodeMap nonCompatClasses;
305 NodeMap mainClasses;
306 NodeMap compatClasses;
307 NodeMap obsoleteClasses;
308 NodeMap namespaceIndex;
309 NodeMap serviceClasses;
310#ifdef QDOC_QML
311 NodeMap qmlClasses;
312#endif
313 QMap<QString, NodeMap > funcIndex;
314 QMap<Text, const Node *> legaleseTexts;
315 NewSinceMaps newSinceMaps;
316 static QString sinceTitles[];
317 NewClassMaps newClassMaps;
318};
319
320#define HTMLGENERATOR_ADDRESS "address"
321#define HTMLGENERATOR_FOOTER "footer"
322#define HTMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me
323#define HTMLGENERATOR_POSTHEADER "postheader"
324#define HTMLGENERATOR_STYLE "style"
325#define HTMLGENERATOR_STYLESHEETS "stylesheets"
326#define HTMLGENERATOR_CUSTOMHEADELEMENTS "customheadelements"
327
328QT_END_NAMESPACE
329
330#endif
331
Note: See TracBrowser for help on using the repository browser.