/******************************************************************************
*
*
*
* Copyright (C) 1997-2015 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 "outputgen.h"
#include "ftextstream.h"
//#define PREFRAG_START "
"
//#define PREFRAG_END "
"
#define PREFRAG_START ""
#define PREFRAG_END "
"
class QFile;
class HtmlCodeGenerator : public CodeOutputInterface
{
public:
HtmlCodeGenerator(FTextStream &t,const QCString &relPath);
HtmlCodeGenerator();
void setTextStream(FTextStream &t);
void setRelativePath(const QCString &path);
void codify(const char *text);
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip);
void writeTooltip(const char *id,
const DocLinkInfo &docInfo,
const char *decl,
const char *desc,
const SourceLinkInfo &defInfo,
const SourceLinkInfo &declInfo
);
void writeLineNumber(const char *,const char *,const char *,int);
void startCodeLine(bool);
void endCodeLine();
void startFontClass(const char *s);
void endFontClass();
void writeCodeAnchor(const char *anchor);
void setCurrentDoc(Definition *,const char *,bool) {}
void addWord(const char *,bool) {}
private:
void _writeCodeLink(const char *className,
const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip);
void docify(const char *str);
bool m_streamSet;
FTextStream m_t;
int m_col;
QCString m_relPath;
};
/** 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 void writeExternalSearchPage();
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; }
// ---- CodeOutputInterface
void codify(const char *text)
{ m_codeGen.codify(text); }
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip)
{ m_codeGen.writeCodeLink(ref,file,anchor,name,tooltip); }
void writeLineNumber(const char *ref,const char *file,const char *anchor,int lineNumber)
{ m_codeGen.writeLineNumber(ref,file,anchor,lineNumber); }
void writeTooltip(const char *id, const DocLinkInfo &docInfo, const char *decl,
const char *desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo
)
{ m_codeGen.writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); }
void startCodeLine(bool hasLineNumbers)
{ m_codeGen.startCodeLine(hasLineNumbers); }
void endCodeLine()
{ m_codeGen.endCodeLine(); }
void startFontClass(const char *s)
{ m_codeGen.startFontClass(s); }
void endFontClass()
{ m_codeGen.endFontClass(); }
void writeCodeAnchor(const char *anchor)
{ m_codeGen.writeCodeAnchor(anchor); }
// ---------------------------
void setCurrentDoc(Definition *context,const char *anchor,bool isSourceFile);
void addWord(const char *word,bool hiPriority);
void writeDoc(DocNode *,Definition *,MemberDef *);
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(const char *classDef);
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 writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name);
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 *, int);
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,const char *inheritId);
void startMemberGroupHeader(bool);
void endMemberGroupHeader();
void startMemberGroupDocs();
void endMemberGroupDocs();
void startMemberGroup();
void endMemberGroup(bool);
void insertMemberAlign(bool);
void insertMemberAlignLeft(int,bool);
void startMemberDescription(const char *anchor,const char *inheritId, bool typ);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *anchor,const char *inheritId);
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 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 *clName, const char *memName,
const char *anchor, const char *title,
int memCount, int memTotal, bool showInline);
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 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 startPageDoc(const char *pageTitle);
void endPageDoc();
void writeNonBreakableSpace(int);
void startDescTable(const char *title);
void endDescTable();
void startDescTableRow();
void endDescTableRow();
void startDescTableTitle();
void endDescTableTitle();
void startDescTableData();
void endDescTableData();
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();
virtual void exceptionEntry(const char*,bool);
void startConstraintList(const char *);
void startConstraintParam();
void endConstraintParam();
void startConstraintType();
void endConstraintType();
void startConstraintDocs();
void endConstraintDocs();
void endConstraintList();
void startMemberDocSimple(bool);
void endMemberDocSimple(bool);
void startInlineMemberType();
void endInlineMemberType();
void startInlineMemberName();
void endInlineMemberName();
void startInlineMemberDoc();
void endInlineMemberDoc();
void startLabels();
void writeLabel(const char *l,bool isLast);
void endLabels();
//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 m_sectionCount;
bool m_emptySection;
HtmlCodeGenerator m_codeGen;
};
#endif