diff -r 000000000000 -r 42188c7ea2d9 Orb/Doxygen/src/outputgen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orb/Doxygen/src/outputgen.h Thu Jan 21 17:29:01 2010 +0000 @@ -0,0 +1,481 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2008 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 OUTPUTGEN_H +#define OUTPUTGEN_H + +#include "qtbc.h" +#include +#include +#include +#include +#include "index.h" +#include "section.h" + +class ClassDiagram; +class DotClassGraph; +class DotInclDepGraph; +class DotCallGraph; +class DotDirDeps; +class DotGfxHierarchyTable; +class DotGroupCollaboration; +class DocNode; +class MemberDef; +class GroupDef; +class Definition; + +/*! \brief Output interface for code parser. + */ +class CodeOutputInterface +{ + public: + virtual ~CodeOutputInterface() {} + /*! Writes an ASCII string to the output. This function should keep + * spaces visible, should break lines at a newline and should convert + * tabs to the right number of spaces. + */ + virtual void codify(const char *s) = 0; + + /*! Writes a link to an object in a code fragment. + * \param ref If this is non-zero, the object is to be found in + * an external documentation file. + * \param file The file in which the object is located. + * \param anchor The anchor uniquely identifying the object within + * the file. + * \param name The text to display as a placeholder for the link. + * \param tooltip The tooltip to display when the mouse is on the link. + */ + virtual void writeCodeLink(const char *ref,const char *file, + const char *anchor,const char *name, + const char *tooltip) = 0; + + virtual void writeLineNumber(const char *ref,const char *file, + const char *anchor,int lineNumber) = 0; + virtual void startCodeLine() = 0; + virtual void endCodeLine() = 0; + virtual void startCodeAnchor(const char *label) = 0; + virtual void endCodeAnchor() = 0; + virtual void startFontClass(const char *) = 0; + virtual void endFontClass() = 0; + virtual void writeCodeAnchor(const char *name) = 0; + virtual void linkableSymbol(int line,const char *symName, + Definition *symDef,Definition *context) = 0; +}; + +/*! \brief Base Interface used for generating output outside of the + * comment blocks. + * + * This abstract class is used by output generation functions + * to generate the output for a specific format, + * or a list of formats (see OutputList). This interface + * contains functions that generate fragments of the output. + */ +class BaseOutputDocInterface : public CodeOutputInterface +{ + public: + virtual ~BaseOutputDocInterface() {} + enum ParamListTypes { Param, RetVal, Exception }; + enum SectionTypes { /*See, Return, Author, Version, + Since, Date, Bug, Note, + Warning, Par, Deprecated, Pre, + Post, Invar, Remark, Attention, + Todo, Test, RCS, */ EnumValues, + Examples + }; + + virtual void parseDoc(const char *,int, const char *,MemberDef *, + const QCString &,bool) {} + virtual void parseText(const QCString &) {} + + /*! Start of a bullet list: e.g. \c \ in html. startItemListItem() is + * Used for the bullet items. + */ + virtual void startItemList() = 0; + + /*! Writes a list item for a bullet or enumerated + * list: e.g. \c \ in html + */ + virtual void startItemListItem() = 0; + + /*! Writes a list item for a bullet or enumerated + * list: e.g. \c \ in html + */ + virtual void endItemListItem() = 0; + + /*! Ends a bullet list: e.g. \c \ in html */ + virtual void endItemList() = 0; + + /*! Writes an ASCII string to the output. Converts characters that have + * A special meaning, like \c & in html. + */ + virtual void docify(const char *s) = 0; + + /*! Writes a single ASCII character to the output. Converts characters + * that have a special meaning. + */ + virtual void writeChar(char c) = 0; + + /*! Writes an ASCII string to the output, \e without converting + * special characters. + */ + virtual void writeString(const char *text) = 0; + + /*! Starts a new paragraph */ + //virtual void newParagraph() = 0; + + /*! Starts a new paragraph */ + virtual void startParagraph() = 0; + /*! Ends a paragraph */ + virtual void endParagraph() = 0; + + /*! Writes a link to an object in the documentation. + * \param ref If this is non-zero, the object is to be found in + * an external documentation file. + * \param file The file in which the object is located. + * \param anchor The anchor uniquely identifying the object within + * the file. + * \param name The text to display as a placeholder for the link. + */ + virtual void writeObjectLink(const char *ref,const char *file, + const char *anchor, const char *name) = 0; + + + /*! Starts a (link to an) URL found in the documentation. + * \param url The URL to link to. + */ + virtual void startHtmlLink(const char *url) = 0; + + /*! Ends a link started by startHtmlLink(). + */ + virtual void endHtmlLink() = 0; + + + /*! Changes the text font to bold face. The bold section ends with + * endBold() + */ + virtual void startBold() = 0; + + /*! End a section of text displayed in bold face. */ + virtual void endBold() = 0; + + /*! Changes the text font to fixed size. The section ends with + * endTypewriter() + */ + virtual void startTypewriter() = 0; + + /*! End a section of text displayed in typewriter style. */ + virtual void endTypewriter() = 0; + + /*! Changes the text font to italic. The italic section ends with + * endEmphasis() + */ + virtual void startEmphasis() = 0; + + /*! Ends a section of text displayed in italic. */ + virtual void endEmphasis() = 0; + + /*! Starts a source code fragment. The fragment will be + * fed to the code parser (see code.h) for syntax highlighting + * and cross-referencing. The fragment ends by a call to + * endCodeFragment() + */ + virtual void startCodeFragment() = 0; + + /*! Ends a source code fragment + */ + virtual void endCodeFragment() = 0; + + + + + /*! Writes a horizontal ruler to the output */ + virtual void writeRuler() = 0; + + /*! Starts a description list: e.g. \c \ in HTML + * Items are surrounded by startDescItem() and endDescItem() + */ + virtual void startDescription() = 0; + + /*! Ends a description list: e.g. \c \ in HTML */ + virtual void endDescription() = 0; + + /*! Starts an item of a description list: e.g. \c \ in HTML. */ + virtual void startDescItem() = 0; + + virtual void startDescForItem() = 0; + virtual void endDescForItem() = 0; + + /*! Ends an item of a description list and starts the + * description itself: e.g. \c \ in HTML. + */ + virtual void endDescItem() = 0; + + virtual void startCenter() = 0; + virtual void endCenter() = 0; + virtual void startSmall() = 0; + virtual void endSmall() = 0; + + virtual void startSimpleSect(SectionTypes t,const char *file, + const char *anchor,const char *title) = 0; + virtual void endSimpleSect() = 0; + virtual void startParamList(ParamListTypes t,const char *title) = 0; + virtual void endParamList() = 0; + + //virtual void writeDescItem() = 0; + virtual void startTitle() = 0; + virtual void endTitle() = 0; + + virtual void writeAnchor(const char *fileName,const char *name) = 0; + virtual void startSection(const char *,const char *,SectionInfo::SectionType) = 0; + virtual void endSection(const char *,SectionInfo::SectionType) = 0; + + virtual void lineBreak(const char *style) = 0; + virtual void addIndexItem(const char *s1,const char *s2) = 0; + + virtual void writeNonBreakableSpace(int) = 0; + virtual void startDescTable() = 0; + virtual void endDescTable() = 0; + virtual void startDescTableTitle() = 0; + virtual void endDescTableTitle() = 0; + virtual void startDescTableData() = 0; + virtual void endDescTableData() = 0; + virtual void startTextLink(const char *file,const char *anchor) = 0; + virtual void endTextLink() = 0; + virtual void startPageRef() = 0; + virtual void endPageRef(const char *,const char *) = 0; + virtual void startSubsection() = 0; + virtual void endSubsection() = 0; + virtual void startSubsubsection() = 0; + virtual void endSubsubsection() = 0; +}; + +/*! \brief Abstract output generator. + * + * Subclass this class to add support for a new output format + */ +class OutputGenerator : public BaseOutputDocInterface +{ + public: + enum OutputType { Html, Latex, Man, RTF, XML, DEF, Perl }; + + OutputGenerator(); + virtual ~OutputGenerator(); + + /////////////////////////////////////////////////////////////// + // generic generator methods + /////////////////////////////////////////////////////////////// + virtual void enable() = 0; + virtual void disable() = 0; + virtual void enableIf(OutputType o) = 0; + virtual void disableIf(OutputType o) = 0; + virtual void disableIfNot(OutputType o) = 0; + virtual bool isEnabled(OutputType o) = 0; + virtual OutputGenerator *get(OutputType o) = 0; + void startPlainFile(const char *name); + void endPlainFile(); + QCString getContents() const; + bool isEnabled() const { return active; } + void pushGeneratorState(); + void popGeneratorState(); + void setEncoding(const QCString &enc) { encoding = enc; } + virtual void postProcess(QByteArray &) { } + + virtual void printDoc(DocNode *,const char *langExt) = 0; + + /////////////////////////////////////////////////////////////// + // structural output interface + /////////////////////////////////////////////////////////////// + virtual void startFile(const char *name,const char *manName, + const char *title) = 0; + virtual void writeFooter() = 0; + virtual void endFile() = 0; + virtual void startIndexSection(IndexSections) = 0; + virtual void endIndexSection(IndexSections) = 0; + virtual void writePageLink(const char *,bool) = 0; + virtual void startProjectNumber() = 0; + virtual void endProjectNumber() = 0; + virtual void writeStyleInfo(int part) = 0; + virtual void startTitleHead(const char *) = 0; + virtual void endTitleHead(const char *fileName,const char *name) = 0; + virtual void startIndexListItem() = 0; + virtual void endIndexListItem() = 0; + virtual void startIndexList() = 0; + virtual void endIndexList() = 0; + virtual void startIndexKey() = 0; + virtual void endIndexKey() = 0; + virtual void startIndexValue(bool) = 0; + virtual void endIndexValue(const char *,bool) = 0; + virtual void startIndexItem(const char *ref,const char *file) = 0; + virtual void endIndexItem(const char *ref,const char *file) = 0; + virtual void startGroupHeader() = 0; + virtual void endGroupHeader() = 0; + virtual void startMemberSections() = 0; + virtual void endMemberSections() = 0; + virtual void startMemberHeader() = 0; + virtual void endMemberHeader() = 0; + virtual void startMemberSubtitle() = 0; + virtual void endMemberSubtitle() = 0; + virtual void startMemberDocList() = 0; + virtual void endMemberDocList() = 0; + virtual void startMemberList() = 0; + virtual void endMemberList() = 0; + virtual void startAnonTypeScope(int) = 0; + virtual void endAnonTypeScope(int) = 0; + virtual void startMemberItem(int) = 0; + virtual void endMemberItem() = 0; + virtual void startMemberTemplateParams() = 0; + virtual void endMemberTemplateParams() = 0; + virtual void startMemberGroupHeader(bool) = 0; + virtual void endMemberGroupHeader() = 0; + virtual void startMemberGroupDocs() = 0; + virtual void endMemberGroupDocs() = 0; + virtual void startMemberGroup() = 0; + virtual void endMemberGroup(bool) = 0; + virtual void insertMemberAlign(bool) = 0; + virtual void startMemberDoc(const char *,const char *, + const char *,const char *) = 0; + virtual void endMemberDoc(bool) = 0; + virtual void startDoxyAnchor(const char *fName,const char *manName, + const char *anchor,const char *name, + const char *args) = 0; + virtual void endDoxyAnchor(const char *fileName,const char *anchor) = 0; + virtual void writeLatexSpacing() = 0; + virtual void writeStartAnnoItem(const char *type,const char *file, + const char *path,const char *name) = 0; + virtual void writeEndAnnoItem(const char *name) = 0; + virtual void startMemberDescription() = 0; + virtual void endMemberDescription() = 0; + virtual void startIndent() = 0; + virtual void endIndent() = 0; + virtual void writeSynopsis() = 0; + virtual void startClassDiagram() = 0; + virtual void endClassDiagram(const ClassDiagram &,const char *,const char *) = 0; + virtual void startDotGraph() = 0; + virtual void endDotGraph(const DotClassGraph &g) = 0; + virtual void startInclDepGraph() = 0; + virtual void endInclDepGraph(const DotInclDepGraph &g) = 0; + virtual void startGroupCollaboration() = 0; + virtual void endGroupCollaboration(const DotGroupCollaboration &g) = 0; + virtual void startCallGraph() = 0; + virtual void endCallGraph(const DotCallGraph &g) = 0; + virtual void startDirDepGraph() = 0; + virtual void endDirDepGraph(const DotDirDeps &g) = 0; + virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0; + virtual void startQuickIndices() = 0; + virtual void endQuickIndices() = 0; + virtual void writeQuickLinks(bool compact,HighlightedItem hli) = 0; + virtual void startContents() = 0; + virtual void endContents() = 0; + virtual void startTextBlock(bool) = 0; + virtual void endTextBlock(bool) = 0; + virtual void lastIndexPage() = 0; + virtual void startMemberDocPrefixItem() = 0; + virtual void endMemberDocPrefixItem() = 0; + virtual void startMemberDocName(bool) = 0; + virtual void endMemberDocName() = 0; + virtual void startParameterType(bool,const char *) = 0; + virtual void endParameterType() = 0; + virtual void startParameterName(bool) = 0; + virtual void endParameterName(bool,bool,bool) = 0; + virtual void startParameterList(bool) = 0; + virtual void endParameterList() = 0; + + virtual void startConstraintList(const char *) = 0; + virtual void startConstraintParam() = 0; + virtual void endConstraintParam() = 0; + virtual void startConstraintType() = 0; + virtual void endConstraintType() = 0; + virtual void startConstraintDocs() = 0; + virtual void endConstraintDocs() = 0; + virtual void endConstraintList() = 0; + + protected: + QTextStream fs; + QByteArray a; + QBuffer b; + QTextStream t; + QFile *file; + QCString dir; + bool active; + QStack *genStack; + QString encoding; + + private: + OutputGenerator(const OutputGenerator &o); + OutputGenerator &operator=(const OutputGenerator &o); +}; + +/*! \brief Interface used for generating documentation. + * + * This abstract class is used by several functions + * to generate the output for a specific format. + * This interface contains some state saving and changing + * functions for dealing with format specific output. + */ +class OutputDocInterface : public BaseOutputDocInterface +{ + public: + virtual ~OutputDocInterface() {} + + /*! Create a new output generator. This can later by appended + * to the current one using append(). + */ + //virtual OutputDocInterface *clone() = 0; + + /*! Disables all output formats except format \a o + * (useful for OutputList only) + */ + virtual void disableAllBut(OutputGenerator::OutputType o) = 0; + + /*! Enables all output formats as far as they have been enabled in + * the config file. (useful for OutputList only) + */ + virtual void enableAll() = 0; + + /*! Disables all output formats (useful for OutputList only) */ + virtual void disableAll()= 0; + + /*! Disables a specific output format (useful for OutputList only) */ + virtual void disable(OutputGenerator::OutputType o) = 0; + + /*! Enables a specific output format (useful for OutputList only) */ + virtual void enable(OutputGenerator::OutputType o) = 0; + + /*! Check whether a specific output format is currenly enabled + * (useful for OutputList only) + */ + virtual bool isEnabled(OutputGenerator::OutputType o) = 0; + + /*! Appends the output generated by generator \a g to this + * generator. + */ + //virtual void append(const OutputDocInterface *g) = 0; + + /*! Pushes the state of the current generator (or list of + * generators) on a stack. + */ + virtual void pushGeneratorState() = 0; + + /*! Pops the state of the current generator (or list of + * generators) on a stack. Should be preceded by a call + * the pushGeneratorState(). + */ + virtual void popGeneratorState() = 0; +}; + + +#endif