/******************************************************************************
*
*
*
* Copyright (C) 1997-2012 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.
*
*/
#ifndef HTMLGEN_H
#define HTMLGEN_H
#include "qtbc.h"
#include "outputgen.h"
//#define PREFRAG_START "
"
//#define PREFRAG_END "
"
#define PREFRAG_START ""
#define PREFRAG_END "
"
class QFile;
class FTextStream;
/** Generator for HTML output */
class HtmlGenerator : public OutputGenerator
{
public:
HtmlGenerator();
virtual ~HtmlGenerator();
static void init();
static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f, const char *cssname);
static void writeFooterFile(QFile &f);
static void writeTabData();
static void writeSearchInfo(FTextStream &t,const QCString &relPath);
static void writeSearchData(const char *dir);
static void writeSearchPage();
static QCString writeLogoAsString(const char *path);
static QCString writeSplitBarAsString(const char *name,const char *relpath);
void enable()
{ if (genStack->top()) active=*genStack->top(); else active=TRUE; }
void disable() { active=FALSE; }
void enableIf(OutputType o) { if (o==Html) enable(); }
void disableIf(OutputType o) { if (o==Html) disable(); }
void disableIfNot(OutputType o) { if (o!=Html) disable(); }
bool isEnabled(OutputType o) { return (o==Html && active); }
OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
void printDoc(DocNode *,const char *);
void startFile(const char *name,const char *manName,const char *title);
void writeFooter(const char *navPath);
void endFile();
void clearBuffer();
void writeSearchInfo();
void startIndexSection(IndexSections) {}
void endIndexSection(IndexSections) {}
void writePageLink(const char *,bool) {}
void startProjectNumber();
void endProjectNumber();
void writeStyleInfo(int part);
void startTitleHead(const char *);
void endTitleHead(const char *,const char *);
void startTitle() { t << ""; }
void endTitle() { t << "
"; }
void startParagraph();
void endParagraph();
void writeString(const char *text);
void startIndexListItem();
void endIndexListItem();
void startIndexList();
void endIndexList();
void startIndexKey();
void endIndexKey();
void startIndexValue(bool);
void endIndexValue(const char *,bool);
void startItemList() { t << "" << endl; }
void endItemList() { t << "
" << endl; }
void startIndexItem(const char *ref,const char *file);
void endIndexItem(const char *ref,const char *file);
void docify(const char *text);
void codify(const char *text);
void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name);
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip);
void startTextLink(const char *file,const char *anchor);
void endTextLink();
void startHtmlLink(const char *url);
void endHtmlLink();
void startTypewriter() { t << ""; }
void endTypewriter() { t << "
"; }
void startGroupHeader(int);
void endGroupHeader(int);
void startItemListItem() { t << ""; }
void endItemListItem() { t << "\n"; }
void startMemberSections();
void endMemberSections();
void startHeaderSection();
void endHeaderSection();
void startMemberHeader(const char *);
void endMemberHeader();
void startMemberSubtitle();
void endMemberSubtitle();
void startMemberDocList();
void endMemberDocList();
void startMemberList();
void endMemberList();
void startInlineHeader();
void endInlineHeader();
void startAnonTypeScope(int) {}
void endAnonTypeScope(int) {}
void startMemberItem(const char *anchor,int,const char *inheritId);
void endMemberItem();
void startMemberTemplateParams();
void endMemberTemplateParams(const char *anchor);
void startMemberGroupHeader(bool);
void endMemberGroupHeader();
void startMemberGroupDocs();
void endMemberGroupDocs();
void startMemberGroup();
void endMemberGroup(bool);
void insertMemberAlign(bool);
void startMemberDescription(const char *anchor,const char *inheritId);
void endMemberDescription();
void writeInheritedSectionTitle(const char *id, const char *ref,
const char *file, const char *anchor,
const char *title,const char *name);
void writeRuler() { t << "
"; }
void writeAnchor(const char *,const char *name)
{ t << ""; }
void startCodeFragment() { t << PREFRAG_START; }
void endCodeFragment() { t << PREFRAG_END; }
void writeLineNumber(const char *,const char *,const char *,int);
void startCodeLine(bool);
void endCodeLine();
void startEmphasis() { t << ""; }
void endEmphasis() { t << ""; }
void startBold() { t << ""; }
void endBold() { t << ""; }
void startDescription() { t << endl << "" << endl; }
void endDescription() { t << endl << "
\n" << endl; }
void startDescItem() { t << ""; }
void endDescItem() { t << ""; }
void startDescForItem() { t << ""; }
void endDescForItem() { t << "\n"; }
void lineBreak(const char *style);
void writeChar(char c);
void startMemberDoc(const char *,const char *,const char *,const char *,bool);
void endMemberDoc(bool);
void startDoxyAnchor(const char *fName,const char *manName,
const char *anchor,const char *name,
const char *args);
void endDoxyAnchor(const char *fName,const char *anchor);
void startCodeAnchor(const char *label);
void endCodeAnchor();
void writeLatexSpacing() {}
void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name);
void writeEndAnnoItem(const char *) { t << endl; }
void startSubsection() { t << ""; }
void endSubsection() { t << "
" << endl; }
void startSubsubsection() { t << ""; }
void endSubsubsection() { t << "
" << endl; }
void startCenter() { t << "" << endl; }
void endCenter() { t << "" << endl; }
void startSmall() { t << "" << endl; }
void endSmall() { t << "" << endl; }
//void startDescList(SectionTypes) { t << "- " << endl; }
//void endDescList() { t << "
"; }
void startSimpleSect(SectionTypes,const char *,const char *,const char *);
void endSimpleSect();
void startParamList(ParamListTypes,const char *);
void endParamList();
//void writeDescItem() { t << "" << endl; }
void startSection(const char *,const char *,SectionInfo::SectionType);
void endSection(const char *,SectionInfo::SectionType);
void addIndexItem(const char *,const char *);
void startIndent();
void endIndent();
void writeSynopsis() {}
void startClassDiagram();
void endClassDiagram(const ClassDiagram &,const char *,const char *);
void startPageRef() {}
void endPageRef(const char *,const char *) {}
void startQuickIndices() {}
void endQuickIndices();
void writeSplitBar(const char *name);
void writeNavigationPath(const char *s);
void writeLogo();
void writeQuickLinks(bool compact,HighlightedItem hli,const char *file);
void writeSummaryLink(const char *file,const char *anchor,const char *title,bool first);
void startContents();
void endContents();
void writeNonBreakableSpace(int);
void startDescTable()
{ t << "" << endl; }
void endDescTable()
{ t << "
" << endl; }
void startDescTableTitle()
{ t << ""; }
void endDescTableTitle()
{ t << " | "; }
void startDescTableData()
{ t << "" << endl; }
void endDescTableData()
{ t << " |
" << endl; }
void startDotGraph();
void endDotGraph(const DotClassGraph &g);
void startInclDepGraph();
void endInclDepGraph(const DotInclDepGraph &g);
void startGroupCollaboration();
void endGroupCollaboration(const DotGroupCollaboration &g);
void startCallGraph();
void endCallGraph(const DotCallGraph &g);
void startDirDepGraph();
void endDirDepGraph(const DotDirDeps &g);
void writeGraphicalHierarchy(const DotGfxHierarchyTable &g);
void startTextBlock(bool)
{ t << ""; }
void endTextBlock(bool)
{ t << "
"; }
void lastIndexPage() {}
void startMemberDocPrefixItem();
void endMemberDocPrefixItem();
void startMemberDocName(bool);
void endMemberDocName();
void startParameterType(bool first,const char *key);
void endParameterType();
void startParameterName(bool);
void endParameterName(bool last,bool emptyList,bool closeBracket);
void startParameterList(bool);
void endParameterList();
void startConstraintList(const char *);
void startConstraintParam();
void endConstraintParam();
void startConstraintType();
void endConstraintType();
void startConstraintDocs();
void endConstraintDocs();
void endConstraintList();
void startMemberDocSimple();
void endMemberDocSimple();
void startInlineMemberType();
void endInlineMemberType();
void startInlineMemberName();
void endInlineMemberName();
void startInlineMemberDoc();
void endInlineMemberDoc();
void startFontClass(const char *s) { t << ""; }
void endFontClass() { t << ""; }
void startLabels();
void writeLabel(const char *l,bool isLast);
void endLabels();
void writeCodeAnchor(const char *anchor)
{ t << ""; }
void linkableSymbol(int,const char *,Definition *,Definition *) {}
//static void generateSectionImages();
private:
static void writePageFooter(FTextStream &t,const QCString &,const QCString &,const QCString &);
QCString lastTitle;
QCString lastFile;
QCString relPath;
void docify(const char *text,bool inHtmlComment);
HtmlGenerator &operator=(const HtmlGenerator &g);
HtmlGenerator(const HtmlGenerator &g);
int col;
int m_sectionCount;
bool m_emptySection;
};
#endif