Blame src/latexgen.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 LATEXGEN_H
Packit 1c1d7e
#define LATEXGEN_H
Packit 1c1d7e
Packit 1c1d7e
#include "outputgen.h"
Packit 1c1d7e
Packit 1c1d7e
class QFile;
Packit 1c1d7e
Packit 1c1d7e
static const char *latexStyleExtension = ".sty";
Packit 1c1d7e
Packit 1c1d7e
class LatexCodeGenerator : public CodeOutputInterface
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    LatexCodeGenerator(FTextStream &t,const QCString &relPath,const QCString &sourceFile);
Packit 1c1d7e
    LatexCodeGenerator();
Packit 1c1d7e
    void setTextStream(FTextStream &t);
Packit 1c1d7e
    void setRelativePath(const QCString &path);
Packit 1c1d7e
    void setSourceFileName(const QCString &sourceFileName);
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 *,
Packit 1c1d7e
                      const DocLinkInfo &,
Packit 1c1d7e
                      const char *,
Packit 1c1d7e
                      const char *,
Packit 1c1d7e
                      const SourceLinkInfo &,
Packit 1c1d7e
                      const SourceLinkInfo &
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 *);
Packit 1c1d7e
    void endFontClass();
Packit 1c1d7e
    void writeCodeAnchor(const char *) {}
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
    QCString m_relPath;
Packit 1c1d7e
    QCString m_sourceFileName;
Packit 1c1d7e
    int m_col;
Packit 1c1d7e
    bool m_prettyCode;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Generator for LaTeX output. */
Packit 1c1d7e
class LatexGenerator : public OutputGenerator
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    LatexGenerator();
Packit 1c1d7e
   ~LatexGenerator();
Packit 1c1d7e
    static void init();
Packit 1c1d7e
    static void writeStyleSheetFile(QFile &f);
Packit 1c1d7e
    static void writeHeaderFile(QFile &f);
Packit 1c1d7e
    static void writeFooterFile(QFile &f);
Packit 1c1d7e
Packit 1c1d7e
    //OutputGenerator *copy();
Packit 1c1d7e
    //OutputGenerator *clone() { return new LatexGenerator(*this); }
Packit 1c1d7e
    //void append(const OutputGenerator *o);
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==Latex) enable();  }
Packit 1c1d7e
    void disableIf(OutputType o) { if (o==Latex) disable(); }
Packit 1c1d7e
    void disableIfNot(OutputType o) { if (o!=Latex) disable(); }
Packit 1c1d7e
    bool isEnabled(OutputType o) { return (o==Latex && active); } 
Packit 1c1d7e
    OutputGenerator *get(OutputType o) { return (o==Latex) ? 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
Packit 1c1d7e
    void writeDoc(DocNode *,Definition *ctx,MemberDef *);
Packit 1c1d7e
Packit 1c1d7e
    void startFile(const char *name,const char *manName,const char *title);
Packit 1c1d7e
    void writeSearchInfo() {}
Packit 1c1d7e
    void writeFooter(const char *) {}
Packit 1c1d7e
    void endFile();
Packit 1c1d7e
    void clearBuffer();
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 startTitle();
Packit 1c1d7e
    void endTitleHead(const char *,const char *name);
Packit 1c1d7e
    void endTitle()   { t << "}"; }
Packit 1c1d7e
Packit 1c1d7e
    void newParagraph();
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() { t << "\\begin{DoxyCompactList}"    << endl; }
Packit 1c1d7e
    void endIndexList()   { t << "\\end{DoxyCompactList}"      << endl; }
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 << "\\begin{DoxyCompactItemize}" << endl; }
Packit 1c1d7e
    void endItemList()    { t << "\\end{DoxyCompactItemize}"   << 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
    void writeObjectLink(const char *ref,const char *file,
Packit 1c1d7e
                         const char *anchor,const char *name);
Packit 1c1d7e
Packit 1c1d7e
    void startTextLink(const char *,const char *);
Packit 1c1d7e
    void endTextLink();
Packit 1c1d7e
    void startHtmlLink(const char *url);
Packit 1c1d7e
    void endHtmlLink();
Packit 1c1d7e
    void startTypewriter() { t << "{\\ttfamily "; }
Packit 1c1d7e
    void endTypewriter()   { t << "}";      }
Packit 1c1d7e
    void startGroupHeader(int);
Packit 1c1d7e
    void endGroupHeader(int);
Packit 1c1d7e
    void startItemListItem() { t << "\\item " << endl; }
Packit 1c1d7e
    void endItemListItem()   {}
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 *,int,const char *);
Packit 1c1d7e
    void endMemberItem();
Packit 1c1d7e
    void startMemberTemplateParams();
Packit 1c1d7e
    void endMemberTemplateParams(const char *,const char *);
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
Packit 1c1d7e
    void writeRuler() { t << endl << endl; }
Packit 1c1d7e
    void writeAnchor(const char *fileName,const char *name);
Packit 1c1d7e
    void startCodeFragment();
Packit 1c1d7e
    void endCodeFragment();
Packit 1c1d7e
    void startEmphasis() { t << "{\\em ";  }
Packit 1c1d7e
    void endEmphasis()   { t << "}"; }
Packit 1c1d7e
    void startBold()     { t << "{\\bfseries "; }
Packit 1c1d7e
    void endBold()       { t << "}"; }
Packit 1c1d7e
    void startDescription();
Packit 1c1d7e
    void endDescription();
Packit 1c1d7e
    void startDescItem();
Packit 1c1d7e
    void endDescItem();
Packit 1c1d7e
    void lineBreak(const char *style=0);
Packit 1c1d7e
    void startMemberDoc(const char *,const char *,const char *,const char *,int,int,bool);
Packit 1c1d7e
    void endMemberDoc(bool);
Packit 1c1d7e
    void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
Packit 1c1d7e
    void endDoxyAnchor(const char *,const char *);
Packit 1c1d7e
    void writeChar(char c);
Packit 1c1d7e
    void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
Packit 1c1d7e
    void writeStartAnnoItem(const char *type,const char *file, 
Packit 1c1d7e
                            const char *path,const char *name);
Packit 1c1d7e
    void writeEndAnnoItem(const char *name);
Packit 1c1d7e
    void startSubsection() { t << "\\subsection*{"; }
Packit 1c1d7e
    void endSubsection() { t << "}" << endl; }
Packit 1c1d7e
    void startSubsubsection() { t << "\\subsubsection*{"; }
Packit 1c1d7e
    void endSubsubsection() { t << "}" << endl; }
Packit 1c1d7e
    void startCenter()      { t << "\\begin{center}" << endl; }
Packit 1c1d7e
    void endCenter()        { t << "\\end{center}" << endl; }
Packit 1c1d7e
    void startSmall()       { t << "\\footnotesize "; }
Packit 1c1d7e
    void endSmall()         { t << "\\normalsize "; }
Packit 1c1d7e
    void startMemberDescription(const char *,const char *);
Packit 1c1d7e
    void endMemberDescription();
Packit 1c1d7e
    void startMemberDeclaration() {} 
Packit 1c1d7e
    void endMemberDeclaration(const char *,const char *) {}
Packit 1c1d7e
    void writeInheritedSectionTitle(const char *,const char *,const char *,
Packit 1c1d7e
                      const char *,const char *,const char *) {}
Packit 1c1d7e
    void startDescList(SectionTypes)     { t << "\\begin{Desc}\n\\item["; }
Packit 1c1d7e
    void endDescList()       { t << "\\end{Desc}" << endl; }
Packit 1c1d7e
    void startSimpleSect(SectionTypes,const char *,const char *,const char *);
Packit 1c1d7e
    void endSimpleSect();
Packit 1c1d7e
    void startParamList(ParamListTypes,const char *title);
Packit 1c1d7e
    void endParamList();
Packit 1c1d7e
    void startDescForItem()     { t << "\\par" << endl; }
Packit 1c1d7e
    void endDescForItem()       {}
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 *) {}
Packit 1c1d7e
    void writeNavigationPath(const char *) {}
Packit 1c1d7e
    void writeLogo() {}
Packit 1c1d7e
    void writeQuickLinks(bool,HighlightedItem,const char*) {}
Packit 1c1d7e
    void writeSummaryLink(const char *,const char *,const char *,bool) {}
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
    void lastIndexPage();
Packit 1c1d7e
Packit 1c1d7e
    void startDotGraph();
Packit 1c1d7e
    void endDotGraph(const DotClassGraph &);
Packit 1c1d7e
    void startInclDepGraph();
Packit 1c1d7e
    void endInclDepGraph(const DotInclDepGraph &);
Packit 1c1d7e
    void startCallGraph();
Packit 1c1d7e
    void startGroupCollaboration();
Packit 1c1d7e
    void endGroupCollaboration(const DotGroupCollaboration &g);
Packit 1c1d7e
    void endCallGraph(const DotCallGraph &);
Packit 1c1d7e
    void startDirDepGraph();
Packit 1c1d7e
    void endDirDepGraph(const DotDirDeps &g);
Packit 1c1d7e
    void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
Packit 1c1d7e
Packit 1c1d7e
    void startTextBlock(bool) {}
Packit 1c1d7e
    void endTextBlock(bool) {}
Packit 1c1d7e
Packit 1c1d7e
    void startMemberDocPrefixItem() {}
Packit 1c1d7e
    void endMemberDocPrefixItem() { t << "\\\\" << endl; }
Packit 1c1d7e
    void startMemberDocName(bool) {}
Packit 1c1d7e
    void endMemberDocName() {}
Packit 1c1d7e
    void startParameterType(bool,const char *);
Packit 1c1d7e
    void endParameterType();
Packit 1c1d7e
    void startParameterName(bool);
Packit 1c1d7e
    void endParameterName(bool,bool,bool);
Packit 1c1d7e
    void startParameterList(bool);
Packit 1c1d7e
    void endParameterList();
Packit 1c1d7e
    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
    void setCurrentDoc(Definition *,const char *,bool) {}
Packit 1c1d7e
    void addWord(const char *,bool) {}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    LatexGenerator(const LatexGenerator &);
Packit 1c1d7e
    LatexGenerator &operator=(const LatexGenerator &);
Packit 1c1d7e
    bool insideTabbing;
Packit 1c1d7e
    bool firstDescItem;
Packit 1c1d7e
    bool disableLinks;
Packit 1c1d7e
    QCString relPath;
Packit 1c1d7e
    int m_indent;
Packit 1c1d7e
    bool templateMemberItem;
Packit 1c1d7e
    bool m_prettyCode;
Packit 1c1d7e
    LatexCodeGenerator m_codeGen;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
#endif