Blame src/htmlgen.h

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * 
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby 
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software 
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Documents produced by Doxygen are derivative works derived from the
Packit 1c1d7e
 * input used in their production; they are not affected by this license.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
Packit 1c1d7e
#ifndef HTMLGEN_H
Packit 1c1d7e
#define HTMLGEN_H
Packit 1c1d7e
Packit 1c1d7e
#include "outputgen.h"
Packit 1c1d7e
#include "ftextstream.h"
Packit 1c1d7e
Packit 1c1d7e
//#define PREFRAG_START "
"
Packit 1c1d7e
//#define PREFRAG_END   ""
Packit 1c1d7e
#define PREFRAG_START "
"
Packit 1c1d7e
#define PREFRAG_END   ""
Packit 1c1d7e
Packit 1c1d7e
class QFile;
Packit 1c1d7e
Packit 1c1d7e
class HtmlCodeGenerator : public CodeOutputInterface
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    HtmlCodeGenerator(FTextStream &t,const QCString &relPath);
Packit 1c1d7e
    HtmlCodeGenerator();
Packit 1c1d7e
    void setTextStream(FTextStream &t);
Packit 1c1d7e
    void setRelativePath(const QCString &path);
Packit 1c1d7e
    void codify(const char *text);
Packit 1c1d7e
    void writeCodeLink(const char *ref,const char *file,
Packit 1c1d7e
                       const char *anchor,const char *name,
Packit 1c1d7e
                       const char *tooltip);
Packit 1c1d7e
    void writeTooltip(const char *id, 
Packit 1c1d7e
                      const DocLinkInfo &docInfo,
Packit 1c1d7e
                      const char *decl,
Packit 1c1d7e
                      const char *desc,
Packit 1c1d7e
                      const SourceLinkInfo &defInfo,
Packit 1c1d7e
                      const SourceLinkInfo &declInfo
Packit 1c1d7e
                     );
Packit 1c1d7e
    void writeLineNumber(const char *,const char *,const char *,int);
Packit 1c1d7e
    void startCodeLine(bool);
Packit 1c1d7e
    void endCodeLine();
Packit 1c1d7e
    void startFontClass(const char *s);
Packit 1c1d7e
    void endFontClass();
Packit 1c1d7e
    void writeCodeAnchor(const char *anchor);
Packit 1c1d7e
    void setCurrentDoc(Definition *,const char *,bool) {}
Packit 1c1d7e
    void addWord(const char *,bool) {}
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    void _writeCodeLink(const char *className,
Packit 1c1d7e
                        const char *ref,const char *file,
Packit 1c1d7e
                        const char *anchor,const char *name,
Packit 1c1d7e
                        const char *tooltip);
Packit 1c1d7e
    void docify(const char *str);
Packit 1c1d7e
    bool m_streamSet;
Packit 1c1d7e
    FTextStream m_t;
Packit 1c1d7e
    int m_col;
Packit 1c1d7e
    QCString m_relPath;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Generator for HTML output */
Packit 1c1d7e
class HtmlGenerator : public OutputGenerator
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    HtmlGenerator();
Packit 1c1d7e
    virtual ~HtmlGenerator();
Packit 1c1d7e
    static void init();
Packit 1c1d7e
    static void writeStyleSheetFile(QFile &f);
Packit 1c1d7e
    static void writeHeaderFile(QFile &f, const char *cssname);
Packit 1c1d7e
    static void writeFooterFile(QFile &f);
Packit 1c1d7e
    static void writeTabData();
Packit 1c1d7e
    static void writeSearchInfo(FTextStream &t,const QCString &relPath);
Packit 1c1d7e
    static void writeSearchData(const char *dir);
Packit 1c1d7e
    static void writeSearchPage();
Packit 1c1d7e
    static void writeExternalSearchPage();
Packit 1c1d7e
    static QCString writeLogoAsString(const char *path);
Packit 1c1d7e
    static QCString writeSplitBarAsString(const char *name,const char *relpath);
Packit 1c1d7e
   
Packit 1c1d7e
    void enable() 
Packit 1c1d7e
    { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
Packit 1c1d7e
    void disable() { active=FALSE; }
Packit 1c1d7e
    void enableIf(OutputType o)  { if (o==Html) enable();  }
Packit 1c1d7e
    void disableIf(OutputType o) { if (o==Html) disable(); }
Packit 1c1d7e
    void disableIfNot(OutputType o) { if (o!=Html) disable(); }
Packit 1c1d7e
    bool isEnabled(OutputType o) { return (o==Html && active); } 
Packit 1c1d7e
    OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
Packit 1c1d7e
Packit 1c1d7e
    // ---- CodeOutputInterface
Packit 1c1d7e
    void codify(const char *text) 
Packit 1c1d7e
    { m_codeGen.codify(text); }
Packit 1c1d7e
    void writeCodeLink(const char *ref,const char *file,
Packit 1c1d7e
                       const char *anchor,const char *name,
Packit 1c1d7e
                       const char *tooltip)
Packit 1c1d7e
    { m_codeGen.writeCodeLink(ref,file,anchor,name,tooltip); }
Packit 1c1d7e
    void writeLineNumber(const char *ref,const char *file,const char *anchor,int lineNumber)
Packit 1c1d7e
    { m_codeGen.writeLineNumber(ref,file,anchor,lineNumber); }
Packit 1c1d7e
    void writeTooltip(const char *id, const DocLinkInfo &docInfo, const char *decl,
Packit 1c1d7e
                      const char *desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo
Packit 1c1d7e
                     )
Packit 1c1d7e
    { m_codeGen.writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); }
Packit 1c1d7e
    void startCodeLine(bool hasLineNumbers)
Packit 1c1d7e
    { m_codeGen.startCodeLine(hasLineNumbers); }
Packit 1c1d7e
    void endCodeLine()
Packit 1c1d7e
    { m_codeGen.endCodeLine(); }
Packit 1c1d7e
    void startFontClass(const char *s) 
Packit 1c1d7e
    { m_codeGen.startFontClass(s); }
Packit 1c1d7e
    void endFontClass() 
Packit 1c1d7e
    { m_codeGen.endFontClass(); }
Packit 1c1d7e
    void writeCodeAnchor(const char *anchor) 
Packit 1c1d7e
    { m_codeGen.writeCodeAnchor(anchor); }
Packit 1c1d7e
    // ---------------------------
Packit 1c1d7e
Packit 1c1d7e
    void setCurrentDoc(Definition *context,const char *anchor,bool isSourceFile);
Packit 1c1d7e
    void addWord(const char *word,bool hiPriority);
Packit 1c1d7e
    void writeDoc(DocNode *,Definition *,MemberDef *);
Packit 1c1d7e
Packit 1c1d7e
    void startFile(const char *name,const char *manName,const char *title);
Packit 1c1d7e
    void writeFooter(const char *navPath);
Packit 1c1d7e
    void endFile();
Packit 1c1d7e
    void clearBuffer();
Packit 1c1d7e
    void writeSearchInfo();
Packit 1c1d7e
Packit 1c1d7e
    void startIndexSection(IndexSections) {}
Packit 1c1d7e
    void endIndexSection(IndexSections) {}
Packit 1c1d7e
    void writePageLink(const char *,bool) {}
Packit 1c1d7e
    void startProjectNumber();
Packit 1c1d7e
    void endProjectNumber();
Packit 1c1d7e
    void writeStyleInfo(int part);
Packit 1c1d7e
    void startTitleHead(const char *);
Packit 1c1d7e
    void endTitleHead(const char *,const char *);
Packit 1c1d7e
    void startTitle() { t << "
"; }
Packit 1c1d7e
    void endTitle() { t << ""; }
Packit 1c1d7e
    
Packit 1c1d7e
    void startParagraph(const char *classDef);
Packit 1c1d7e
    void endParagraph();
Packit 1c1d7e
    void writeString(const char *text);
Packit 1c1d7e
    void startIndexListItem();
Packit 1c1d7e
    void endIndexListItem();
Packit 1c1d7e
    void startIndexList();
Packit 1c1d7e
    void endIndexList();
Packit 1c1d7e
    void startIndexKey();
Packit 1c1d7e
    void endIndexKey();
Packit 1c1d7e
    void startIndexValue(bool);
Packit 1c1d7e
    void endIndexValue(const char *,bool);
Packit 1c1d7e
    void startItemList()  { t << "
    " << endl; }
Packit 1c1d7e
    void endItemList()    { t << "" << endl; }
Packit 1c1d7e
    void startIndexItem(const char *ref,const char *file);
Packit 1c1d7e
    void endIndexItem(const char *ref,const char *file);
Packit 1c1d7e
    void docify(const char *text);
Packit 1c1d7e
Packit 1c1d7e
    void writeObjectLink(const char *ref,const char *file,
Packit 1c1d7e
                         const char *anchor,const char *name);
Packit 1c1d7e
Packit 1c1d7e
    void startTextLink(const char *file,const char *anchor);
Packit 1c1d7e
    void endTextLink();
Packit 1c1d7e
    void startHtmlLink(const char *url);
Packit 1c1d7e
    void endHtmlLink();
Packit 1c1d7e
    void startTypewriter() { t << ""; }
Packit 1c1d7e
    void endTypewriter()   { t << ""; }
Packit 1c1d7e
    void startGroupHeader(int);
Packit 1c1d7e
    void endGroupHeader(int);
Packit 1c1d7e
    void startItemListItem() { t << "
  • "; }
  • Packit 1c1d7e
        void endItemListItem() { t << "\n"; }
    Packit 1c1d7e
    Packit 1c1d7e
        void startMemberSections();
    Packit 1c1d7e
        void endMemberSections();
    Packit 1c1d7e
        void startHeaderSection();
    Packit 1c1d7e
        void endHeaderSection();
    Packit 1c1d7e
        void startMemberHeader(const char *);
    Packit 1c1d7e
        void endMemberHeader();
    Packit 1c1d7e
        void startMemberSubtitle();
    Packit 1c1d7e
        void endMemberSubtitle();
    Packit 1c1d7e
        void startMemberDocList();
    Packit 1c1d7e
        void endMemberDocList();
    Packit 1c1d7e
        void startMemberList();
    Packit 1c1d7e
        void endMemberList();
    Packit 1c1d7e
        void startInlineHeader();
    Packit 1c1d7e
        void endInlineHeader();
    Packit 1c1d7e
        void startAnonTypeScope(int) {}
    Packit 1c1d7e
        void endAnonTypeScope(int) {}
    Packit 1c1d7e
        void startMemberItem(const char *anchor,int,const char *inheritId);
    Packit 1c1d7e
        void endMemberItem();
    Packit 1c1d7e
        void startMemberTemplateParams();
    Packit 1c1d7e
        void endMemberTemplateParams(const char *anchor,const char *inheritId);
    Packit 1c1d7e
    Packit 1c1d7e
        void startMemberGroupHeader(bool);
    Packit 1c1d7e
        void endMemberGroupHeader();
    Packit 1c1d7e
        void startMemberGroupDocs();
    Packit 1c1d7e
        void endMemberGroupDocs();
    Packit 1c1d7e
        void startMemberGroup();
    Packit 1c1d7e
        void endMemberGroup(bool);
    Packit 1c1d7e
    Packit 1c1d7e
        void insertMemberAlign(bool);
    Packit 1c1d7e
        void startMemberDescription(const char *anchor,const char *inheritId);
    Packit 1c1d7e
        void endMemberDescription();
    Packit 1c1d7e
        void startMemberDeclaration() {}
    Packit 1c1d7e
        void endMemberDeclaration(const char *anchor,const char *inheritId);
    Packit 1c1d7e
        void writeInheritedSectionTitle(const char *id,   const char *ref,
    Packit 1c1d7e
                                        const char *file, const char *anchor,
    Packit 1c1d7e
                                        const char *title,const char *name);
    Packit 1c1d7e
    Packit 1c1d7e
        void writeRuler()    { t << "
    "; }
    Packit 1c1d7e
        void writeAnchor(const char *,const char *name) 
    Packit 1c1d7e
                             { t << ""; }
    Packit 1c1d7e
        void startCodeFragment() { t << PREFRAG_START; }
    Packit 1c1d7e
        void endCodeFragment()   { t << PREFRAG_END; } 
    Packit 1c1d7e
        void startEmphasis() { t << "";  }
    Packit 1c1d7e
        void endEmphasis()   { t << ""; }
    Packit 1c1d7e
        void startBold()     { t << ""; }
    Packit 1c1d7e
        void endBold()       { t << ""; }
    Packit 1c1d7e
        void startDescription() { t << endl << "
    " << endl; }
    Packit 1c1d7e
        void endDescription()   { t << endl << "\n" << endl; }
    Packit 1c1d7e
        void startDescItem()    { t << "
    "; }
    Packit 1c1d7e
        void endDescItem()      { t << ""; }
    Packit 1c1d7e
        void startDescForItem() { t << "
    "; }
    Packit 1c1d7e
        void endDescForItem()   { t << "\n"; }
    Packit 1c1d7e
        void lineBreak(const char *style);
    Packit 1c1d7e
        void writeChar(char c);
    Packit 1c1d7e
        void startMemberDoc(const char *clName, const char *memName, 
    Packit 1c1d7e
                            const char *anchor, const char *title, 
    Packit 1c1d7e
                            int memCount, int memTotal, bool showInline);
    Packit 1c1d7e
        void endMemberDoc(bool); 
    Packit 1c1d7e
        void startDoxyAnchor(const char *fName,const char *manName,
    Packit 1c1d7e
                             const char *anchor,const char *name,
    Packit 1c1d7e
                             const char *args);
    Packit 1c1d7e
        void endDoxyAnchor(const char *fName,const char *anchor);
    Packit 1c1d7e
        void writeLatexSpacing() {}
    Packit 1c1d7e
        void writeStartAnnoItem(const char *type,const char *file,
    Packit 1c1d7e
                                const char *path,const char *name);
    Packit 1c1d7e
        void writeEndAnnoItem(const char *) { t << endl; }
    Packit 1c1d7e
        void startSubsection()    { t << "

    "; }

    Packit 1c1d7e
        void endSubsection()      { t << "" << endl; }
    Packit 1c1d7e
        void startSubsubsection() { t << "

    "; }

    Packit 1c1d7e
        void endSubsubsection()   { t << "" << endl; }
    Packit 1c1d7e
        void startCenter()        { t << "<center>" << endl; }
    Packit 1c1d7e
        void endCenter()          { t << "</center>" << endl; }
    Packit 1c1d7e
        void startSmall()         { t << "<small>" << endl; }
    Packit 1c1d7e
        void endSmall()           { t << "</small>" << endl; }
    Packit 1c1d7e
        //void startDescList(SectionTypes)      { t << "
    " << endl; }
    Packit 1c1d7e
        //void endDescList()        { t << ""; }
    Packit 1c1d7e
        void startSimpleSect(SectionTypes,const char *,const char *,const char *);
    Packit 1c1d7e
        void endSimpleSect();
    Packit 1c1d7e
        void startParamList(ParamListTypes,const char *);
    Packit 1c1d7e
        void endParamList();
    Packit 1c1d7e
        //void writeDescItem()      { t << "
    " << endl; }
    Packit 1c1d7e
        void startSection(const char *,const char *,SectionInfo::SectionType);
    Packit 1c1d7e
        void endSection(const char *,SectionInfo::SectionType);
    Packit 1c1d7e
        void addIndexItem(const char *,const char *);
    Packit 1c1d7e
        void startIndent();
    Packit 1c1d7e
        void endIndent();
    Packit 1c1d7e
        void writeSynopsis() {}
    Packit 1c1d7e
        void startClassDiagram();
    Packit 1c1d7e
        void endClassDiagram(const ClassDiagram &,const char *,const char *);
    Packit 1c1d7e
        void startPageRef() {}
    Packit 1c1d7e
        void endPageRef(const char *,const char *) {}
    Packit 1c1d7e
        void startQuickIndices() {}
    Packit 1c1d7e
        void endQuickIndices();
    Packit 1c1d7e
        void writeSplitBar(const char *name);
    Packit 1c1d7e
        void writeNavigationPath(const char *s);
    Packit 1c1d7e
        void writeLogo();
    Packit 1c1d7e
        void writeQuickLinks(bool compact,HighlightedItem hli,const char *file);
    Packit 1c1d7e
        void writeSummaryLink(const char *file,const char *anchor,const char *title,bool first);
    Packit 1c1d7e
        void startContents();
    Packit 1c1d7e
        void endContents();
    Packit 1c1d7e
        void writeNonBreakableSpace(int);
    Packit 1c1d7e
    Packit 1c1d7e
        void startDescTable(const char *title);
    Packit 1c1d7e
        void endDescTable();
    Packit 1c1d7e
        void startDescTableRow();
    Packit 1c1d7e
        void endDescTableRow();
    Packit 1c1d7e
        void startDescTableTitle();
    Packit 1c1d7e
        void endDescTableTitle();
    Packit 1c1d7e
        void startDescTableData();
    Packit 1c1d7e
        void endDescTableData();
    Packit 1c1d7e
    Packit 1c1d7e
        void startDotGraph();
    Packit 1c1d7e
        void endDotGraph(const DotClassGraph &g);
    Packit 1c1d7e
        void startInclDepGraph();
    Packit 1c1d7e
        void endInclDepGraph(const DotInclDepGraph &g);
    Packit 1c1d7e
        void startGroupCollaboration();
    Packit 1c1d7e
        void endGroupCollaboration(const DotGroupCollaboration &g);
    Packit 1c1d7e
        void startCallGraph();
    Packit 1c1d7e
        void endCallGraph(const DotCallGraph &g);
    Packit 1c1d7e
        void startDirDepGraph();
    Packit 1c1d7e
        void endDirDepGraph(const DotDirDeps &g);
    Packit 1c1d7e
        void writeGraphicalHierarchy(const DotGfxHierarchyTable &g);
    Packit 1c1d7e
    Packit 1c1d7e
        void startTextBlock(bool) 
    Packit 1c1d7e
        { t << "
    "; }
    Packit 1c1d7e
        void endTextBlock(bool) 
    Packit 1c1d7e
        { t << ""; }
    Packit 1c1d7e
        void lastIndexPage() {}
    Packit 1c1d7e
    Packit 1c1d7e
        void startMemberDocPrefixItem();
    Packit 1c1d7e
        void endMemberDocPrefixItem();
    Packit 1c1d7e
        void startMemberDocName(bool);
    Packit 1c1d7e
        void endMemberDocName();
    Packit 1c1d7e
        void startParameterType(bool first,const char *key);
    Packit 1c1d7e
        void endParameterType();
    Packit 1c1d7e
        void startParameterName(bool);
    Packit 1c1d7e
        void endParameterName(bool last,bool emptyList,bool closeBracket);
    Packit 1c1d7e
        void startParameterList(bool);
    Packit 1c1d7e
        void endParameterList();
    Packit 1c1d7e
        virtual void exceptionEntry(const char*,bool);
    Packit 1c1d7e
    Packit 1c1d7e
        void startConstraintList(const char *);
    Packit 1c1d7e
        void startConstraintParam();
    Packit 1c1d7e
        void endConstraintParam();
    Packit 1c1d7e
        void startConstraintType();
    Packit 1c1d7e
        void endConstraintType();
    Packit 1c1d7e
        void startConstraintDocs();
    Packit 1c1d7e
        void endConstraintDocs();
    Packit 1c1d7e
        void endConstraintList();
    Packit 1c1d7e
    Packit 1c1d7e
        void startMemberDocSimple(bool);
    Packit 1c1d7e
        void endMemberDocSimple(bool);
    Packit 1c1d7e
        void startInlineMemberType();
    Packit 1c1d7e
        void endInlineMemberType();
    Packit 1c1d7e
        void startInlineMemberName();
    Packit 1c1d7e
        void endInlineMemberName();
    Packit 1c1d7e
        void startInlineMemberDoc();
    Packit 1c1d7e
        void endInlineMemberDoc();
    Packit 1c1d7e
    Packit 1c1d7e
        void startLabels();
    Packit 1c1d7e
        void writeLabel(const char *l,bool isLast);
    Packit 1c1d7e
        void endLabels();
    Packit 1c1d7e
    Packit 1c1d7e
    Packit 1c1d7e
        //static void generateSectionImages();
    Packit 1c1d7e
    Packit 1c1d7e
      private:
    Packit 1c1d7e
        static void writePageFooter(FTextStream &t,const QCString &,const QCString &,const QCString &);
    Packit 1c1d7e
        QCString lastTitle;
    Packit 1c1d7e
        QCString lastFile;
    Packit 1c1d7e
        QCString relPath;
    Packit 1c1d7e
        void docify(const char *text,bool inHtmlComment);
    Packit 1c1d7e
    Packit 1c1d7e
        HtmlGenerator &operator=(const HtmlGenerator &g);
    Packit 1c1d7e
        HtmlGenerator(const HtmlGenerator &g);
    Packit 1c1d7e
    Packit 1c1d7e
        int m_sectionCount;
    Packit 1c1d7e
        bool m_emptySection;
    Packit 1c1d7e
        HtmlCodeGenerator m_codeGen;
    Packit 1c1d7e
    };
    Packit 1c1d7e
    Packit 1c1d7e
    #endif