Blame src/docparser.h

Packit 1c1d7e
/******************************************************************************
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 _DOCPARSER_H
Packit 1c1d7e
#define _DOCPARSER_H
Packit 1c1d7e
Packit 1c1d7e
#include <stdio.h>
Packit 1c1d7e
Packit 1c1d7e
#include <qlist.h>
Packit 1c1d7e
#include <qcstring.h>
Packit 1c1d7e
Packit 1c1d7e
#include "docvisitor.h"
Packit 1c1d7e
#include "htmlattrib.h"
Packit 1c1d7e
Packit 1c1d7e
class DocNode;
Packit 1c1d7e
class MemberDef;
Packit 1c1d7e
class Definition;
Packit 1c1d7e
class MemberGroup;
Packit 1c1d7e
class SectionDict;
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/*! Main entry point for the documentation parser.
Packit 1c1d7e
 *  @param fileName  File in which the documentation block is found (or the
Packit 1c1d7e
 *                   name of the example file in case isExample is TRUE).
Packit 1c1d7e
 *  @param startLine Line at which the documentation block is found.
Packit 1c1d7e
 *  @param context   Class or namespace to which this block belongs.
Packit 1c1d7e
 *  @param md        Member definition to which the documentation belongs.
Packit 1c1d7e
 *                   Can be 0.
Packit 1c1d7e
 *  @param input     String representation of the documentation block.
Packit 1c1d7e
 *  @param indexWords Indicates whether or not words should be put in the 
Packit 1c1d7e
 *                   search index.
Packit 1c1d7e
 *  @param isExample TRUE if the documentation belongs to an example.
Packit 1c1d7e
 *  @param exampleName Base name of the example file (0 if isExample is FALSE).
Packit 1c1d7e
 *  @param singleLine Output should be presented on a single line, so without
Packit 1c1d7e
 *                   starting a new paragraph at the end.
Packit 1c1d7e
 *  @param linkFromIndex TRUE if the documentation is generated from an
Packit 1c1d7e
 *                   index page. In this case context is not used to determine
Packit 1c1d7e
 *                   the relative path when making a link.
Packit 1c1d7e
 *  @returns         Root node of the abstract syntax tree. Ownership of the
Packit 1c1d7e
 *                   pointer is handed over to the caller.
Packit 1c1d7e
 */
Packit 1c1d7e
DocRoot *validatingParseDoc(const char *fileName,int startLine,
Packit 1c1d7e
                            Definition *context, MemberDef *md,
Packit 1c1d7e
                            const char *input,bool indexWords,
Packit 1c1d7e
                            bool isExample,const char *exampleName=0,
Packit 1c1d7e
                            bool singleLine=FALSE,bool linkFromIndex=FALSE);
Packit 1c1d7e
Packit 1c1d7e
/*! Main entry point for parsing simple text fragments. These 
Packit 1c1d7e
 *  fragments are limited to words, whitespace and symbols.
Packit 1c1d7e
 */
Packit 1c1d7e
DocText *validatingParseText(const char *input);
Packit 1c1d7e
Packit 1c1d7e
/*! Searches for section and anchor commands in the input */
Packit 1c1d7e
void docFindSections(const char *input,
Packit 1c1d7e
                     Definition *d,
Packit 1c1d7e
                     MemberGroup *m,
Packit 1c1d7e
                     const char *fileName);
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
/** Abstract node interface with type information. */
Packit 1c1d7e
class DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    /*! Available node types. */
Packit 1c1d7e
    enum Kind { Kind_Root           = 0, 
Packit 1c1d7e
                Kind_Word           = 1, 
Packit 1c1d7e
                Kind_WhiteSpace     = 2, 
Packit 1c1d7e
                Kind_Para           = 3, 
Packit 1c1d7e
                Kind_AutoList       = 4, 
Packit 1c1d7e
                Kind_AutoListItem   = 5,
Packit 1c1d7e
                Kind_Symbol         = 6,
Packit 1c1d7e
                Kind_URL            = 7,
Packit 1c1d7e
                Kind_StyleChange    = 8,
Packit 1c1d7e
                Kind_SimpleSect     = 9,
Packit 1c1d7e
                Kind_Title          = 10,
Packit 1c1d7e
                Kind_SimpleList     = 11,
Packit 1c1d7e
                Kind_SimpleListItem = 12,
Packit 1c1d7e
                Kind_Section        = 13,
Packit 1c1d7e
                Kind_Verbatim       = 14,
Packit 1c1d7e
                Kind_XRefItem       = 15,
Packit 1c1d7e
                Kind_HtmlList       = 16,
Packit 1c1d7e
                Kind_HtmlListItem   = 17,
Packit 1c1d7e
                Kind_HtmlDescList   = 18,
Packit 1c1d7e
                Kind_HtmlDescData   = 19,
Packit 1c1d7e
                Kind_HtmlDescTitle  = 20,
Packit 1c1d7e
                Kind_HtmlTable      = 21,
Packit 1c1d7e
                Kind_HtmlRow        = 22,
Packit 1c1d7e
                Kind_HtmlCell       = 23,
Packit 1c1d7e
                Kind_HtmlCaption    = 24,
Packit 1c1d7e
                Kind_LineBreak      = 25,
Packit 1c1d7e
                Kind_HorRuler       = 26,
Packit 1c1d7e
                Kind_Anchor         = 27,
Packit 1c1d7e
                Kind_IndexEntry     = 28,
Packit 1c1d7e
                Kind_Internal       = 29,
Packit 1c1d7e
                Kind_HRef           = 30,
Packit 1c1d7e
                Kind_Include        = 31,
Packit 1c1d7e
                Kind_IncOperator    = 32,
Packit 1c1d7e
                Kind_HtmlHeader     = 33,
Packit 1c1d7e
                Kind_Image          = 34,
Packit 1c1d7e
                Kind_DotFile        = 35,
Packit 1c1d7e
                Kind_Link           = 36,
Packit 1c1d7e
                Kind_Ref            = 37,
Packit 1c1d7e
                Kind_Formula        = 38,
Packit 1c1d7e
                Kind_SecRefItem     = 39,
Packit 1c1d7e
                Kind_SecRefList     = 40,
Packit 1c1d7e
                Kind_SimpleSectSep  = 41,
Packit 1c1d7e
                Kind_LinkedWord     = 42,
Packit 1c1d7e
                Kind_ParamSect      = 43,
Packit 1c1d7e
                Kind_ParamList      = 44,
Packit 1c1d7e
                Kind_InternalRef    = 45,
Packit 1c1d7e
                Kind_Copy           = 46,
Packit 1c1d7e
                Kind_Text           = 47,
Packit 1c1d7e
                Kind_MscFile        = 48,
Packit 1c1d7e
                Kind_HtmlBlockQuote = 49,
Packit 1c1d7e
                Kind_VhdlFlow       = 50,
Packit 1c1d7e
                Kind_ParBlock       = 51,
Packit 1c1d7e
                Kind_DiaFile        = 52
Packit 1c1d7e
              };
Packit 1c1d7e
    /*! Creates a new node */
Packit 1c1d7e
    DocNode() : m_parent(0), m_insidePre(FALSE) {}
Packit 1c1d7e
Packit 1c1d7e
    /*! Destroys a node. */
Packit 1c1d7e
    virtual ~DocNode() {}
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns the kind of node. Provides runtime type information */
Packit 1c1d7e
    virtual Kind kind() const = 0;
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns the parent of this node or 0 for the root node. */
Packit 1c1d7e
    DocNode *parent() const { return m_parent; }
Packit 1c1d7e
Packit 1c1d7e
    /*! Sets a new parent for this node. */
Packit 1c1d7e
    void setParent(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
Packit 1c1d7e
    /*! Acceptor function for node visitors. Part of the visitor pattern. 
Packit 1c1d7e
     *  @param v Abstract visitor.
Packit 1c1d7e
     */
Packit 1c1d7e
    virtual void accept(DocVisitor *v) = 0;
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns TRUE iff this node is inside a preformatted section */
Packit 1c1d7e
    bool isPreformatted() const { return m_insidePre; }
Packit 1c1d7e
Packit 1c1d7e
  protected:
Packit 1c1d7e
    /*! Sets whether or not this item is inside a preformatted section */
Packit 1c1d7e
    void setInsidePreformatted(bool p) { m_insidePre = p; }
Packit 1c1d7e
    DocNode *m_parent;
Packit 1c1d7e
  private:
Packit 1c1d7e
Packit 1c1d7e
    bool m_insidePre;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Default accept implementation for compound nodes in the abstract
Packit 1c1d7e
 *  syntax tree.
Packit 1c1d7e
 */
Packit 1c1d7e
template<class T> class CompAccept
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    CompAccept() { m_children.setAutoDelete(TRUE); }
Packit 1c1d7e
    virtual ~CompAccept() {}
Packit 1c1d7e
    void accept(T *obj, DocVisitor *v) 
Packit 1c1d7e
    { 
Packit 1c1d7e
      v->visitPre(obj); 
Packit 1c1d7e
      QListIterator<DocNode> cli(m_children);
Packit 1c1d7e
      DocNode *n;
Packit 1c1d7e
      for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
Packit 1c1d7e
      v->visitPost(obj); 
Packit 1c1d7e
    }
Packit 1c1d7e
    const QList<DocNode> &children() const { return m_children; }
Packit 1c1d7e
    QList<DocNode> &children() { return m_children; }
Packit 1c1d7e
  
Packit 1c1d7e
  protected:
Packit 1c1d7e
    QList<DocNode> m_children;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a word 
Packit 1c1d7e
 */
Packit 1c1d7e
class DocWord : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocWord(DocNode *parent,const QCString &word);
Packit 1c1d7e
    QCString word() const { return m_word; }
Packit 1c1d7e
    Kind kind() const { return Kind_Word; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_word;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a word that can be linked to something
Packit 1c1d7e
 */
Packit 1c1d7e
class DocLinkedWord : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocLinkedWord(DocNode *parent,const QCString &word,
Packit 1c1d7e
                  const QCString &ref,const QCString &file,
Packit 1c1d7e
                  const QCString &anchor,const QCString &tooltip);
Packit 1c1d7e
    QCString word() const       { return m_word; }
Packit 1c1d7e
    Kind kind() const          { return Kind_LinkedWord; }
Packit 1c1d7e
    QCString file() const       { return m_file; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    QCString ref() const        { return m_ref; }
Packit 1c1d7e
    QCString anchor() const     { return m_anchor; }
Packit 1c1d7e
    QCString tooltip() const    { return m_tooltip; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_word;
Packit 1c1d7e
    QCString  m_ref;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_anchor;
Packit 1c1d7e
    QCString  m_tooltip;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an URL (or email address) */
Packit 1c1d7e
class DocURL : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocURL(DocNode *parent,const QCString &url,bool isEmail) : 
Packit 1c1d7e
      m_url(url), m_isEmail(isEmail) { m_parent=parent; }
Packit 1c1d7e
    QCString url() const        { return m_url; }
Packit 1c1d7e
    Kind kind() const          { return Kind_URL; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
    bool isEmail() const       { return m_isEmail; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_url;
Packit 1c1d7e
    bool m_isEmail;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a line break */
Packit 1c1d7e
class DocLineBreak : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocLineBreak(DocNode *parent) { m_parent=parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_LineBreak; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a horizonal ruler */
Packit 1c1d7e
class DocHorRuler : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHorRuler(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_HorRuler; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an anchor */
Packit 1c1d7e
class DocAnchor : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocAnchor(DocNode *parent,const QCString &id,bool newAnchor);
Packit 1c1d7e
    Kind kind() const          { return Kind_Anchor; }
Packit 1c1d7e
    QCString anchor() const    { return m_anchor; }
Packit 1c1d7e
    QCString file() const      { return m_file; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_anchor;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a citation of some bibliographic reference */
Packit 1c1d7e
class DocCite : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocCite(DocNode *parent,const QCString &target,const QCString &context);
Packit 1c1d7e
    Kind kind() const            { return Kind_Ref; }
Packit 1c1d7e
    QCString file() const        { return m_file; }
Packit 1c1d7e
    QCString relPath() const     { return m_relPath; }
Packit 1c1d7e
    QCString ref() const         { return m_ref; }
Packit 1c1d7e
    QCString anchor() const      { return m_anchor; }
Packit 1c1d7e
    QCString text() const        { return m_text; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString   m_file;
Packit 1c1d7e
    QCString   m_relPath;
Packit 1c1d7e
    QCString   m_ref;
Packit 1c1d7e
    QCString   m_anchor;
Packit 1c1d7e
    QCString   m_text;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a style change */
Packit 1c1d7e
class DocStyleChange : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Style { Bold          = (1<<0),
Packit 1c1d7e
                 Italic        = (1<<1),
Packit 1c1d7e
                 Code          = (1<<2),
Packit 1c1d7e
                 Center        = (1<<3),
Packit 1c1d7e
                 Small         = (1<<4),
Packit 1c1d7e
                 Subscript     = (1<<5),
Packit 1c1d7e
                 Superscript   = (1<<6),
Packit 1c1d7e
                 Preformatted  = (1<<7),
Packit 1c1d7e
                 Span          = (1<<8),
Packit 1c1d7e
                 Div           = (1<<9)
Packit 1c1d7e
               };
Packit 1c1d7e
Packit 1c1d7e
    DocStyleChange(DocNode *parent,uint position,Style s,bool enable,
Packit 1c1d7e
                   const HtmlAttribList *attribs=0) : 
Packit 1c1d7e
      m_position(position), m_style(s), m_enable(enable)
Packit 1c1d7e
      { m_parent = parent; if (attribs) m_attribs=*attribs; }
Packit 1c1d7e
    Kind kind() const                     { return Kind_StyleChange; }
Packit 1c1d7e
    Style style() const                   { return m_style; }
Packit 1c1d7e
    const char *styleString() const;
Packit 1c1d7e
    bool enable() const                   { return m_enable; }
Packit 1c1d7e
    uint position() const                 { return m_position; }
Packit 1c1d7e
    void accept(DocVisitor *v)            { v->visit(this); }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    uint     m_position;
Packit 1c1d7e
    Style    m_style;
Packit 1c1d7e
    bool     m_enable;
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a special symbol */
Packit 1c1d7e
class DocSymbol : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum SymType { Sym_Unknown = -1,
Packit 1c1d7e
                   Sym_nbsp, Sym_iexcl, Sym_cent, Sym_pound, Sym_curren,
Packit 1c1d7e
                   Sym_yen, Sym_brvbar, Sym_sect, Sym_uml, Sym_copy,
Packit 1c1d7e
                   Sym_ordf, Sym_laquo, Sym_not, Sym_shy, Sym_reg,
Packit 1c1d7e
                   Sym_macr, Sym_deg, Sym_plusmn, Sym_sup2, Sym_sup3,
Packit 1c1d7e
                   Sym_acute, Sym_micro, Sym_para, Sym_middot, Sym_cedil,
Packit 1c1d7e
                   Sym_sup1, Sym_ordm, Sym_raquo, Sym_frac14, Sym_frac12,
Packit 1c1d7e
                   Sym_frac34, Sym_iquest, Sym_Agrave, Sym_Aacute, Sym_Acirc,
Packit 1c1d7e
                   Sym_Atilde, Sym_Auml, Sym_Aring, Sym_AElig, Sym_Ccedil,
Packit 1c1d7e
                   Sym_Egrave, Sym_Eacute, Sym_Ecirc, Sym_Euml, Sym_Igrave,
Packit 1c1d7e
                   Sym_Iacute, Sym_Icirc, Sym_Iuml, Sym_ETH, Sym_Ntilde,
Packit 1c1d7e
                   Sym_Ograve, Sym_Oacute, Sym_Ocirc, Sym_Otilde, Sym_Ouml,
Packit 1c1d7e
                   Sym_times, Sym_Oslash, Sym_Ugrave, Sym_Uacute, Sym_Ucirc,
Packit 1c1d7e
                   Sym_Uuml, Sym_Yacute, Sym_THORN, Sym_szlig, Sym_agrave,
Packit 1c1d7e
                   Sym_aacute, Sym_acirc, Sym_atilde, Sym_auml, Sym_aring,
Packit 1c1d7e
                   Sym_aelig, Sym_ccedil, Sym_egrave, Sym_eacute, Sym_ecirc,
Packit 1c1d7e
                   Sym_euml, Sym_igrave, Sym_iacute, Sym_icirc, Sym_iuml,
Packit 1c1d7e
                   Sym_eth, Sym_ntilde, Sym_ograve, Sym_oacute, Sym_ocirc,
Packit 1c1d7e
                   Sym_otilde, Sym_ouml, Sym_divide, Sym_oslash, Sym_ugrave,
Packit 1c1d7e
                   Sym_uacute, Sym_ucirc, Sym_uuml, Sym_yacute, Sym_thorn,
Packit 1c1d7e
                   Sym_yuml, Sym_fnof, Sym_Alpha, Sym_Beta, Sym_Gamma,
Packit 1c1d7e
                   Sym_Delta, Sym_Epsilon, Sym_Zeta, Sym_Eta, Sym_Theta,
Packit 1c1d7e
                   Sym_Iota, Sym_Kappa, Sym_Lambda, Sym_Mu, Sym_Nu,
Packit 1c1d7e
                   Sym_Xi, Sym_Omicron, Sym_Pi, Sym_Rho, Sym_Sigma,
Packit 1c1d7e
                   Sym_Tau, Sym_Upsilon, Sym_Phi, Sym_Chi, Sym_Psi,
Packit 1c1d7e
                   Sym_Omega, Sym_alpha, Sym_beta, Sym_gamma, Sym_delta,
Packit 1c1d7e
                   Sym_epsilon, Sym_zeta, Sym_eta, Sym_theta, Sym_iota,
Packit 1c1d7e
                   Sym_kappa, Sym_lambda, Sym_mu, Sym_nu, Sym_xi,
Packit 1c1d7e
                   Sym_omicron, Sym_pi, Sym_rho, Sym_sigmaf, Sym_sigma,
Packit 1c1d7e
                   Sym_tau, Sym_upsilon, Sym_phi, Sym_chi, Sym_psi,
Packit 1c1d7e
                   Sym_omega, Sym_thetasym, Sym_upsih, Sym_piv, Sym_bull,
Packit 1c1d7e
                   Sym_hellip, Sym_prime, Sym_Prime, Sym_oline, Sym_frasl,
Packit 1c1d7e
                   Sym_weierp, Sym_image, Sym_real, Sym_trade, Sym_alefsym,
Packit 1c1d7e
                   Sym_larr, Sym_uarr, Sym_rarr, Sym_darr, Sym_harr,
Packit 1c1d7e
                   Sym_crarr, Sym_lArr, Sym_uArr, Sym_rArr, Sym_dArr,
Packit 1c1d7e
                   Sym_hArr, Sym_forall, Sym_part, Sym_exist, Sym_empty,
Packit 1c1d7e
                   Sym_nabla, Sym_isin, Sym_notin, Sym_ni, Sym_prod,
Packit 1c1d7e
                   Sym_sum, Sym_minus, Sym_lowast, Sym_radic, Sym_prop,
Packit 1c1d7e
                   Sym_infin, Sym_ang, Sym_and, Sym_or, Sym_cap,
Packit 1c1d7e
                   Sym_cup, Sym_int, Sym_there4, Sym_sim, Sym_cong,
Packit 1c1d7e
                   Sym_asymp, Sym_ne, Sym_equiv, Sym_le, Sym_ge,
Packit 1c1d7e
                   Sym_sub, Sym_sup, Sym_nsub, Sym_sube, Sym_supe,
Packit 1c1d7e
                   Sym_oplus, Sym_otimes, Sym_perp, Sym_sdot, Sym_lceil,
Packit 1c1d7e
                   Sym_rceil, Sym_lfloor, Sym_rfloor, Sym_lang, Sym_rang,
Packit 1c1d7e
                   Sym_loz, Sym_spades, Sym_clubs, Sym_hearts, Sym_diams,
Packit 1c1d7e
                   Sym_quot, Sym_amp, Sym_lt, Sym_gt, Sym_OElig,
Packit 1c1d7e
                   Sym_oelig, Sym_Scaron, Sym_scaron, Sym_Yuml, Sym_circ,
Packit 1c1d7e
                   Sym_tilde, Sym_ensp, Sym_emsp, Sym_thinsp, Sym_zwnj,
Packit 1c1d7e
                   Sym_zwj, Sym_lrm, Sym_rlm, Sym_ndash, Sym_mdash,
Packit 1c1d7e
                   Sym_lsquo, Sym_rsquo, Sym_sbquo, Sym_ldquo, Sym_rdquo,
Packit 1c1d7e
                   Sym_bdquo, Sym_dagger, Sym_Dagger, Sym_permil, Sym_lsaquo,
Packit 1c1d7e
                   Sym_rsaquo, Sym_euro,
Packit 1c1d7e
Packit 1c1d7e
                   /* doxygen extensions */
Packit 1c1d7e
                   Sym_tm, Sym_apos,
Packit 1c1d7e
Packit 1c1d7e
                   /* doxygen commands mapped */
Packit 1c1d7e
                   Sym_BSlash, Sym_At, Sym_Less, Sym_Greater, Sym_Amp,
Packit 1c1d7e
                   Sym_Dollar, Sym_Hash, Sym_DoubleColon, Sym_Percent, Sym_Pipe,
Packit 1c1d7e
                   Sym_Quot, Sym_Minus, Sym_Plus, Sym_Dot
Packit 1c1d7e
                 };
Packit 1c1d7e
    enum PerlType { Perl_unknown = 0, Perl_string, Perl_char, Perl_symbol, Perl_umlaut,
Packit 1c1d7e
                    Perl_acute, Perl_grave, Perl_circ, Perl_slash, Perl_tilde,
Packit 1c1d7e
                    Perl_cedilla, Perl_ring
Packit 1c1d7e
                  };
Packit 1c1d7e
    typedef struct PerlSymb {
Packit 1c1d7e
      const char     *symb;
Packit 1c1d7e
      const PerlType  type;
Packit 1c1d7e
    }PerlSymb;
Packit 1c1d7e
    DocSymbol(DocNode *parent,SymType s) : 
Packit 1c1d7e
      m_symbol(s) { m_parent = parent; }
Packit 1c1d7e
    SymType symbol() const     { return m_symbol; }
Packit 1c1d7e
    Kind kind() const          { return Kind_Symbol; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
    static SymType decodeSymbol(const QCString &symName);
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    SymType  m_symbol;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing some amount of white space */
Packit 1c1d7e
class DocWhiteSpace : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocWhiteSpace(DocNode *parent,const QCString &chars) : 
Packit 1c1d7e
      m_chars(chars) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_WhiteSpace; }
Packit 1c1d7e
    QCString chars() const      { return m_chars; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_chars;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a verbatim, unparsed text fragment */
Packit 1c1d7e
class DocVerbatim : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Type { Code, HtmlOnly, ManOnly, LatexOnly, RtfOnly, XmlOnly, Verbatim, Dot, Msc, DocbookOnly, PlantUML };
Packit 1c1d7e
    DocVerbatim(DocNode *parent,const QCString &context,
Packit 1c1d7e
                const QCString &text, Type t,bool isExample,
Packit 1c1d7e
                const QCString &exampleFile,bool isBlock=FALSE,const QCString &lang=QCString());
Packit 1c1d7e
    Kind kind() const            { return Kind_Verbatim; }
Packit 1c1d7e
    Type type() const            { return m_type; }
Packit 1c1d7e
    QCString text() const        { return m_text; }
Packit 1c1d7e
    QCString context() const     { return m_context; }
Packit 1c1d7e
    void accept(DocVisitor *v)   { v->visit(this); }
Packit 1c1d7e
    bool isExample() const       { return m_isExample; }
Packit 1c1d7e
    QCString exampleFile() const { return m_exampleFile; }
Packit 1c1d7e
    QCString relPath() const     { return m_relPath; }
Packit 1c1d7e
    QCString language() const    { return m_lang; }
Packit 1c1d7e
    bool isBlock() const         { return m_isBlock; }
Packit 1c1d7e
    bool hasCaption() const      { return !m_children.isEmpty(); }
Packit 1c1d7e
    QCString width() const       { return m_width; }
Packit 1c1d7e
    QCString height() const      { return m_height; }
Packit 1c1d7e
    const QList<DocNode> &children() const { return m_children; }
Packit 1c1d7e
    QList<DocNode> &children()   { return m_children; }
Packit 1c1d7e
    void setText(const QCString &t)   { m_text=t;   }
Packit 1c1d7e
    void setWidth(const QCString &w)  { m_width=w;  }
Packit 1c1d7e
    void setHeight(const QCString &h) { m_height=h; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_context;
Packit 1c1d7e
    QCString  m_text;
Packit 1c1d7e
    Type      m_type;
Packit 1c1d7e
    bool      m_isExample;
Packit 1c1d7e
    QCString  m_exampleFile;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_lang;
Packit 1c1d7e
    bool      m_isBlock;
Packit 1c1d7e
    QCString  m_width;
Packit 1c1d7e
    QCString  m_height;
Packit 1c1d7e
    QList<DocNode> m_children;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an included text block from file */
Packit 1c1d7e
class DocInclude : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
  enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude,
Packit 1c1d7e
	      IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines};
Packit 1c1d7e
    DocInclude(DocNode *parent,const QCString &file,
Packit 1c1d7e
               const QCString context, Type t,
Packit 1c1d7e
               bool isExample,const QCString exampleFile,
Packit 1c1d7e
               const QCString blockId) : 
Packit 1c1d7e
      m_file(file), m_context(context), m_type(t),
Packit 1c1d7e
      m_isExample(isExample), m_exampleFile(exampleFile),
Packit 1c1d7e
      m_blockId(blockId) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const            { return Kind_Include; }
Packit 1c1d7e
    QCString file() const        { return m_file; }
Packit 1c1d7e
    QCString extension() const   { int i=m_file.findRev('.'); 
Packit 1c1d7e
                                   if (i!=-1) 
Packit 1c1d7e
                                     return m_file.right(m_file.length()-i); 
Packit 1c1d7e
                                   else 
Packit 1c1d7e
                                     return ""; 
Packit 1c1d7e
                                 }
Packit 1c1d7e
    Type type() const            { return m_type; }
Packit 1c1d7e
    QCString text() const        { return m_text; }
Packit 1c1d7e
    QCString context() const     { return m_context; }
Packit 1c1d7e
    QCString blockId() const     { return m_blockId; }
Packit 1c1d7e
    bool isExample() const       { return m_isExample; }
Packit 1c1d7e
    QCString exampleFile() const { return m_exampleFile; }
Packit 1c1d7e
    void accept(DocVisitor *v)   { v->visit(this); }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_context;
Packit 1c1d7e
    QCString  m_text;
Packit 1c1d7e
    Type      m_type;
Packit 1c1d7e
    bool      m_isExample;
Packit 1c1d7e
    QCString  m_exampleFile;
Packit 1c1d7e
    QCString  m_blockId;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a include/dontinclude operator block */
Packit 1c1d7e
class DocIncOperator : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Type { Line, SkipLine, Skip, Until };
Packit 1c1d7e
    DocIncOperator(DocNode *parent,Type t,const QCString &pat,
Packit 1c1d7e
                   const QCString &context,bool isExample,const QCString &exampleFile) : 
Packit 1c1d7e
      m_type(t), m_pattern(pat), m_context(context), 
Packit 1c1d7e
      m_isFirst(FALSE), m_isLast(FALSE),
Packit 1c1d7e
      m_isExample(isExample), m_exampleFile(exampleFile) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const           { return Kind_IncOperator; }
Packit 1c1d7e
    Type type() const           { return m_type; }
Packit 1c1d7e
    QCString text() const        { return m_text; }
Packit 1c1d7e
    QCString pattern() const     { return m_pattern; }
Packit 1c1d7e
    QCString context() const     { return m_context; }
Packit 1c1d7e
    void accept(DocVisitor *v)  { v->visit(this); }
Packit 1c1d7e
    bool isFirst() const        { return m_isFirst; }
Packit 1c1d7e
    bool isLast() const         { return m_isLast; }
Packit 1c1d7e
    void markFirst(bool v=TRUE) { m_isFirst = v; }
Packit 1c1d7e
    void markLast(bool v=TRUE)  { m_isLast = v; }
Packit 1c1d7e
    bool isExample() const      { return m_isExample; }
Packit 1c1d7e
    QCString exampleFile() const { return m_exampleFile; }
Packit 1c1d7e
    QCString includeFileName() const { return m_includeFileName; }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    Type     m_type;
Packit 1c1d7e
    QCString  m_text;
Packit 1c1d7e
    QCString  m_pattern;
Packit 1c1d7e
    QCString  m_context;
Packit 1c1d7e
    bool     m_isFirst;
Packit 1c1d7e
    bool     m_isLast;
Packit 1c1d7e
    bool     m_isExample;
Packit 1c1d7e
    QCString  m_exampleFile;
Packit 1c1d7e
    QCString m_includeFileName;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an item of a cross-referenced list */
Packit 1c1d7e
class DocFormula : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocFormula(DocNode *parent,int id);
Packit 1c1d7e
    Kind kind() const          { return Kind_Formula; }
Packit 1c1d7e
    QCString name() const       { return m_name; }
Packit 1c1d7e
    QCString text() const       { return m_text; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    int id() const             { return m_id; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
    bool isInline()            { return m_text.length()>0 ? m_text.at(0)!='\\' : TRUE; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_name;
Packit 1c1d7e
    QCString  m_text;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    int      m_id;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an entry in the index. */
Packit 1c1d7e
class DocIndexEntry : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocIndexEntry(DocNode *parent,Definition *scope,MemberDef *md) 
Packit 1c1d7e
      : m_scope(scope), m_member(md){ m_parent = parent; }
Packit 1c1d7e
    Kind kind() const { return Kind_IndexEntry; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    Definition *scope() const    { return m_scope;  }
Packit 1c1d7e
    MemberDef *member() const    { return m_member; }
Packit 1c1d7e
    QCString entry() const        { return m_entry;  }
Packit 1c1d7e
    void accept(DocVisitor *v)   { v->visit(this);  }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString     m_entry;
Packit 1c1d7e
    Definition *m_scope;
Packit 1c1d7e
    MemberDef  *m_member;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
//-----------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a copy of documentation block. */
Packit 1c1d7e
class DocCopy : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocCopy(DocNode *parent,const QCString &link,bool copyBrief,bool copyDetails) 
Packit 1c1d7e
      : m_link(link), 
Packit 1c1d7e
        m_copyBrief(copyBrief), m_copyDetails(copyDetails) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_Copy; }
Packit 1c1d7e
    QCString link() const       { return m_link; }
Packit 1c1d7e
    void accept(DocVisitor * /*v*/) { /*CompAccept<DocCopy>::accept(this,v);*/ }
Packit 1c1d7e
    void parse(QList<DocNode> &children);
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_link;
Packit 1c1d7e
    bool     m_copyBrief;
Packit 1c1d7e
    bool     m_copyDetails;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an auto List */
Packit 1c1d7e
class DocAutoList : public CompAccept<DocAutoList>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocAutoList(DocNode *parent,int indent,bool isEnumList,int depth);
Packit 1c1d7e
    Kind kind() const          { return Kind_AutoList; }
Packit 1c1d7e
    bool isEnumList() const    { return m_isEnumList; }
Packit 1c1d7e
    int  indent() const        { return m_indent; }
Packit 1c1d7e
    int depth() const          { return m_depth; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocAutoList>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    int      m_indent;
Packit 1c1d7e
    bool     m_isEnumList;
Packit 1c1d7e
    int      m_depth;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an item of a auto list */
Packit 1c1d7e
class DocAutoListItem : public CompAccept<DocAutoListItem>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocAutoListItem(DocNode *parent,int indent,int num);
Packit 1c1d7e
    Kind kind() const          { return Kind_AutoListItem; }
Packit 1c1d7e
    int itemNumber() const     { return m_itemNum; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocAutoListItem>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    int m_indent;
Packit 1c1d7e
    int m_itemNum;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a simple section title */
Packit 1c1d7e
class DocTitle : public CompAccept<DocTitle>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocTitle(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    void parseFromString(const QCString &title);
Packit 1c1d7e
    Kind kind() const          { return Kind_Title; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocTitle>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an item of a cross-referenced list */
Packit 1c1d7e
class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocXRefItem(DocNode *parent,int id,const char *key);
Packit 1c1d7e
    Kind kind() const          { return Kind_XRefItem; }
Packit 1c1d7e
    QCString file() const       { return m_file; }
Packit 1c1d7e
    QCString anchor() const     { return m_anchor; }
Packit 1c1d7e
    QCString title() const      { return m_title; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    QCString key() const        { return m_key; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); }
Packit 1c1d7e
    bool parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    int      m_id;
Packit 1c1d7e
    QCString  m_key;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_anchor;
Packit 1c1d7e
    QCString  m_title;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an image */
Packit 1c1d7e
class DocImage : public CompAccept<DocImage>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Type { Html, Latex, Rtf, DocBook };
Packit 1c1d7e
    DocImage(DocNode *parent,const HtmlAttribList &attribs,
Packit 1c1d7e
             const QCString &name,Type t,const QCString &url=QCString());
Packit 1c1d7e
    Kind kind() const           { return Kind_Image; }
Packit 1c1d7e
    Type type() const           { return m_type; }
Packit 1c1d7e
    QCString name() const       { return m_name; }
Packit 1c1d7e
    bool hasCaption() const     { return !m_children.isEmpty(); }
Packit 1c1d7e
    QCString width() const      { return m_width; }
Packit 1c1d7e
    QCString height() const     { return m_height; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    QCString url() const        { return m_url; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
    QCString  m_name;
Packit 1c1d7e
    Type      m_type;
Packit 1c1d7e
    QCString  m_width;
Packit 1c1d7e
    QCString  m_height;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_url;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a dot file */
Packit 1c1d7e
class DocDotFile : public CompAccept<DocDotFile>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocDotFile(DocNode *parent,const QCString &name,const QCString &context);
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const          { return Kind_DotFile; }
Packit 1c1d7e
    QCString name() const       { return m_name; }
Packit 1c1d7e
    QCString file() const       { return m_file; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    bool hasCaption() const    { return !m_children.isEmpty(); }
Packit 1c1d7e
    QCString width() const      { return m_width; }
Packit 1c1d7e
    QCString height() const     { return m_height; }
Packit 1c1d7e
    QCString context() const    { return m_context; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); }
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_name;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_width;
Packit 1c1d7e
    QCString  m_height;
Packit 1c1d7e
    QCString  m_context;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a msc file */
Packit 1c1d7e
class DocMscFile : public CompAccept<DocMscFile>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocMscFile(DocNode *parent,const QCString &name,const QCString &context);
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const          { return Kind_MscFile; }
Packit 1c1d7e
    QCString name() const      { return m_name; }
Packit 1c1d7e
    QCString file() const      { return m_file; }
Packit 1c1d7e
    QCString relPath() const   { return m_relPath; }
Packit 1c1d7e
    bool hasCaption() const    { return !m_children.isEmpty(); }
Packit 1c1d7e
    QCString width() const     { return m_width; }
Packit 1c1d7e
    QCString height() const    { return m_height; }
Packit 1c1d7e
    QCString context() const   { return m_context; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocMscFile>::accept(this,v); }
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_name;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_width;
Packit 1c1d7e
    QCString  m_height;
Packit 1c1d7e
    QCString  m_context;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a dia file */
Packit 1c1d7e
class DocDiaFile : public CompAccept<DocDiaFile>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocDiaFile(DocNode *parent,const QCString &name,const QCString &context);
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const          { return Kind_DiaFile; }
Packit 1c1d7e
    QCString name() const      { return m_name; }
Packit 1c1d7e
    QCString file() const      { return m_file; }
Packit 1c1d7e
    QCString relPath() const   { return m_relPath; }
Packit 1c1d7e
    bool hasCaption() const    { return !m_children.isEmpty(); }
Packit 1c1d7e
    QCString width() const     { return m_width; }
Packit 1c1d7e
    QCString height() const    { return m_height; }
Packit 1c1d7e
    QCString context() const   { return m_context; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocDiaFile>::accept(this,v); }
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_name;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_width;
Packit 1c1d7e
    QCString  m_height;
Packit 1c1d7e
    QCString  m_context;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a VHDL flow chart */
Packit 1c1d7e
class DocVhdlFlow : public CompAccept<DocVhdlFlow>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocVhdlFlow(DocNode *parent);
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const    { return Kind_VhdlFlow; }
Packit 1c1d7e
    bool hasCaption()    { return !m_children.isEmpty(); }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocVhdlFlow>::accept(this,v); }
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a link to some item */
Packit 1c1d7e
class DocLink : public CompAccept<DocLink>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocLink(DocNode *parent,const QCString &target);
Packit 1c1d7e
    QCString parse(bool,bool isXmlLink=FALSE);
Packit 1c1d7e
    Kind kind() const          { return Kind_Link; }
Packit 1c1d7e
    QCString file() const       { return m_file; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    QCString ref() const        { return m_ref; }
Packit 1c1d7e
    QCString anchor() const     { return m_anchor; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocLink>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_relPath;
Packit 1c1d7e
    QCString  m_ref;
Packit 1c1d7e
    QCString  m_anchor;
Packit 1c1d7e
    QCString  m_refText;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a reference to some item */
Packit 1c1d7e
class DocRef : public CompAccept<DocRef>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocRef(DocNode *parent,const QCString &target,const QCString &context);
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const            { return Kind_Ref; }
Packit 1c1d7e
    QCString file() const         { return m_file; }
Packit 1c1d7e
    QCString relPath() const      { return m_relPath; }
Packit 1c1d7e
    QCString ref() const          { return m_ref; }
Packit 1c1d7e
    QCString anchor() const       { return m_anchor; }
Packit 1c1d7e
    QCString targetTitle() const  { return m_text; }
Packit 1c1d7e
    bool hasLinkText() const     { return !m_children.isEmpty(); }
Packit 1c1d7e
    bool refToAnchor() const     { return m_refType==Anchor; }
Packit 1c1d7e
    bool refToSection() const    { return m_refType==Section; }
Packit 1c1d7e
    bool refToTable() const      { return m_refType==Table; }
Packit 1c1d7e
    bool isSubPage() const       { return m_isSubPage; }
Packit 1c1d7e
    void accept(DocVisitor *v)   { CompAccept<DocRef>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    enum RefType { Unknown, Anchor, Section, Table };
Packit 1c1d7e
    RefType    m_refType;
Packit 1c1d7e
    bool       m_isSubPage;
Packit 1c1d7e
    QCString   m_file;
Packit 1c1d7e
    QCString   m_relPath;
Packit 1c1d7e
    QCString   m_ref;
Packit 1c1d7e
    QCString   m_anchor;
Packit 1c1d7e
    QCString   m_text;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an internal reference to some item */
Packit 1c1d7e
class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocInternalRef(DocNode *parent,const QCString &target);
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const            { return Kind_Ref; }
Packit 1c1d7e
    QCString file() const         { return m_file; }
Packit 1c1d7e
    QCString relPath() const      { return m_relPath; }
Packit 1c1d7e
    QCString anchor() const       { return m_anchor; }
Packit 1c1d7e
    void accept(DocVisitor *v)   { CompAccept<DocInternalRef>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString   m_file;
Packit 1c1d7e
    QCString   m_relPath;
Packit 1c1d7e
    QCString   m_anchor;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a Hypertext reference */
Packit 1c1d7e
class DocHRef : public CompAccept<DocHRef>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url,
Packit 1c1d7e
           const QCString &relPath) : 
Packit 1c1d7e
      m_attribs(attribs), m_url(url), m_relPath(relPath) { m_parent = parent; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    QCString url() const        { return m_url; }
Packit 1c1d7e
    QCString relPath() const    { return m_relPath; }
Packit 1c1d7e
    Kind kind() const           { return Kind_HRef; }
Packit 1c1d7e
    void accept(DocVisitor *v)  { CompAccept<DocHRef>::accept(this,v); }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
    QCString   m_url;
Packit 1c1d7e
    QCString   m_relPath;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node Html heading */
Packit 1c1d7e
class DocHtmlHeader : public CompAccept<DocHtmlHeader>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlHeader(DocNode *parent,const HtmlAttribList &attribs,int level) : 
Packit 1c1d7e
       m_level(level), m_attribs(attribs) { m_parent = parent; }
Packit 1c1d7e
    int level() const                     { return m_level; }
Packit 1c1d7e
    Kind kind() const                     { return Kind_HtmlHeader; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlHeader>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    int           m_level;
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a Html description item */
Packit 1c1d7e
class DocHtmlDescTitle : public CompAccept<DocHtmlDescTitle>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlDescTitle(DocNode *parent,const HtmlAttribList &attribs) : 
Packit 1c1d7e
      m_attribs(attribs) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const                     { return Kind_HtmlDescTitle; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlDescTitle>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a Html description list */
Packit 1c1d7e
class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlDescList(DocNode *parent,const HtmlAttribList &attribs) :
Packit 1c1d7e
      m_attribs(attribs) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const                     { return Kind_HtmlDescList; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlDescList>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a normal section */
Packit 1c1d7e
class DocSection : public CompAccept<DocSection>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocSection(DocNode *parent,int level,const QCString &id) :
Packit 1c1d7e
      m_level(level), m_id(id) { m_parent = parent; } 
Packit 1c1d7e
    Kind kind() const          { return Kind_Section; }
Packit 1c1d7e
    int level() const          { return m_level; }
Packit 1c1d7e
    QCString title() const      { return m_title; }
Packit 1c1d7e
    QCString anchor() const     { return m_anchor; }
Packit 1c1d7e
    QCString id() const         { return m_id; }
Packit 1c1d7e
    QCString file() const       { return m_file; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocSection>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    int      m_level;
Packit 1c1d7e
    QCString  m_id;
Packit 1c1d7e
    QCString  m_title;
Packit 1c1d7e
    QCString  m_anchor;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a reference to a section */
Packit 1c1d7e
class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocSecRefItem(DocNode *parent,const QCString &target) : 
Packit 1c1d7e
      m_target(target) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_SecRefItem; }
Packit 1c1d7e
    QCString target() const     { return m_target; }
Packit 1c1d7e
    QCString file() const       { return m_file; }
Packit 1c1d7e
    QCString anchor() const     { return m_anchor; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocSecRefItem>::accept(this,v); }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_target;
Packit 1c1d7e
    QCString  m_file;
Packit 1c1d7e
    QCString  m_anchor;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a list of section references */
Packit 1c1d7e
class DocSecRefList : public CompAccept<DocSecRefList>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocSecRefList(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    Kind kind() const          { return Kind_SecRefList; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocSecRefList>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an internal section of documentation */
Packit 1c1d7e
class DocInternal : public CompAccept<DocInternal>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocInternal(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    int parse(int);
Packit 1c1d7e
    Kind kind() const          { return Kind_Internal; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an block of paragraphs */
Packit 1c1d7e
class DocParBlock : public CompAccept<DocParBlock>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocParBlock(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    Kind kind() const          { return Kind_ParBlock; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocParBlock>::accept(this,v); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a simple list */
Packit 1c1d7e
class DocSimpleList : public CompAccept<DocSimpleList>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocSimpleList(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_SimpleList; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocSimpleList>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a Html list */
Packit 1c1d7e
class DocHtmlList : public CompAccept<DocHtmlList>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Type { Unordered, Ordered };
Packit 1c1d7e
    DocHtmlList(DocNode *parent,const HtmlAttribList &attribs,Type t) : 
Packit 1c1d7e
      m_type(t), m_attribs(attribs) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_HtmlList; }
Packit 1c1d7e
    Type type() const          { return m_type; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlList>::accept(this,v); }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    int parseXml();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    Type          m_type;
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a simple section */
Packit 1c1d7e
class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Type 
Packit 1c1d7e
    {  
Packit 1c1d7e
       Unknown, See, Return, Author, Authors, Version, Since, Date,
Packit 1c1d7e
       Note, Warning, Copyright, Pre, Post, Invar, Remark, Attention, User, Rcs
Packit 1c1d7e
    };
Packit 1c1d7e
    DocSimpleSect(DocNode *parent,Type t);
Packit 1c1d7e
    virtual ~DocSimpleSect();
Packit 1c1d7e
    Kind kind() const       { return Kind_SimpleSect; }
Packit 1c1d7e
    Type type() const       { return m_type; }
Packit 1c1d7e
    QCString typeString() const;
Packit 1c1d7e
    void accept(DocVisitor *v);
Packit 1c1d7e
    int parse(bool userTitle,bool needsSeparator);
Packit 1c1d7e
    int parseRcs();
Packit 1c1d7e
    int parseXml();
Packit 1c1d7e
    void appendLinkWord(const QCString &word);
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    Type            m_type;
Packit 1c1d7e
    DocTitle *      m_title;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a separator between two simple sections of the
Packit 1c1d7e
 *  same type. 
Packit 1c1d7e
 */
Packit 1c1d7e
class DocSimpleSectSep : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocSimpleSectSep(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const { return Kind_SimpleSectSep; }
Packit 1c1d7e
    void accept(DocVisitor *v) { v->visit(this); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a parameter section */
Packit 1c1d7e
class DocParamSect : public CompAccept<DocParamSect>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
    friend class DocParamList;
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Type 
Packit 1c1d7e
    {  
Packit 1c1d7e
       Unknown, Param, RetVal, Exception, TemplateParam
Packit 1c1d7e
    };
Packit 1c1d7e
    enum Direction
Packit 1c1d7e
    {
Packit 1c1d7e
       In=1, Out=2, InOut=3, Unspecified=0
Packit 1c1d7e
    };
Packit 1c1d7e
    DocParamSect(DocNode *parent,Type t) 
Packit 1c1d7e
      : m_type(t), m_hasInOutSpecifier(FALSE), m_hasTypeSpecifier(FALSE) 
Packit 1c1d7e
    { m_parent = parent; }
Packit 1c1d7e
    int parse(const QCString &cmdName,bool xmlContext,Direction d);
Packit 1c1d7e
    Kind kind() const          { return Kind_ParamSect; }
Packit 1c1d7e
    Type type() const          { return m_type; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocParamSect>::accept(this,v); }
Packit 1c1d7e
    bool hasInOutSpecifier() const { return m_hasInOutSpecifier; }
Packit 1c1d7e
    bool hasTypeSpecifier() const  { return m_hasTypeSpecifier; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    Type            m_type;
Packit 1c1d7e
    bool            m_hasInOutSpecifier;
Packit 1c1d7e
    bool            m_hasTypeSpecifier;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a paragraph in the documentation tree */
Packit 1c1d7e
class DocPara : public CompAccept<DocPara>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocPara(DocNode *parent) : 
Packit 1c1d7e
             m_isFirst(FALSE), m_isLast(FALSE) { m_parent = parent; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    Kind kind() const           { return Kind_Para; }
Packit 1c1d7e
    bool isEmpty() const        { return m_children.isEmpty(); }
Packit 1c1d7e
    void accept(DocVisitor *v)  { CompAccept<DocPara>::accept(this,v); }
Packit 1c1d7e
    void markFirst(bool v=TRUE) { m_isFirst=v; }
Packit 1c1d7e
    void markLast(bool v=TRUE)  { m_isLast=v; }
Packit 1c1d7e
    bool isFirst() const        { return m_isFirst; }
Packit 1c1d7e
    bool isLast() const         { return m_isLast; }
Packit 1c1d7e
Packit 1c1d7e
    int handleCommand(const QCString &cmdName);
Packit 1c1d7e
    int handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs);
Packit 1c1d7e
    int handleHtmlEndTag(const QCString &tagName);
Packit 1c1d7e
    int handleSimpleSection(DocSimpleSect::Type t,bool xmlContext=FALSE);
Packit 1c1d7e
    int handleXRefItem();
Packit 1c1d7e
    int handleParamSection(const QCString &cmdName,DocParamSect::Type t,
Packit 1c1d7e
                           bool xmlContext,
Packit 1c1d7e
                           int direction);
Packit 1c1d7e
    void handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t);
Packit 1c1d7e
    void handleImage(const QCString &cmdName);
Packit 1c1d7e
    template<class T> void handleFile(const QCString &cmdName);
Packit 1c1d7e
    void handleInclude(const QCString &cmdName,DocInclude::Type t);
Packit 1c1d7e
    void handleLink(const QCString &cmdName,bool isJavaLink);
Packit 1c1d7e
    void handleCite();
Packit 1c1d7e
    void handleRef(const QCString &cmdName);
Packit 1c1d7e
    void handleSection(const QCString &cmdName);
Packit 1c1d7e
    void handleInheritDoc();
Packit 1c1d7e
    void handleVhdlFlow();
Packit 1c1d7e
    int handleStartCode();
Packit 1c1d7e
    int handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
Packit 1c1d7e
Packit 1c1d7e
    bool injectToken(int tok,const QCString &tokText);
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QCString  m_sectionId;
Packit 1c1d7e
    bool     m_isFirst;
Packit 1c1d7e
    bool     m_isLast;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a parameter list. */
Packit 1c1d7e
class DocParamList : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocParamList(DocNode *parent,DocParamSect::Type t,DocParamSect::Direction d) 
Packit 1c1d7e
      : m_type(t), m_dir(d), m_isFirst(TRUE), m_isLast(TRUE)
Packit 1c1d7e
    { m_paragraphs.setAutoDelete(TRUE); 
Packit 1c1d7e
      m_params.setAutoDelete(TRUE); 
Packit 1c1d7e
      m_paramTypes.setAutoDelete(TRUE);
Packit 1c1d7e
      m_parent = parent; 
Packit 1c1d7e
    }
Packit 1c1d7e
    virtual ~DocParamList()         { }
Packit 1c1d7e
    Kind kind() const               { return Kind_ParamList; }
Packit 1c1d7e
    const QList<DocNode> &parameters()    { return m_params; }
Packit 1c1d7e
    const QList<DocNode> &paramTypes()    { return m_paramTypes; }
Packit 1c1d7e
    DocParamSect::Type type() const { return m_type; }
Packit 1c1d7e
    DocParamSect::Direction direction() const { return m_dir; }
Packit 1c1d7e
    void markFirst(bool b=TRUE)     { m_isFirst=b; }
Packit 1c1d7e
    void markLast(bool b=TRUE)      { m_isLast=b; }
Packit 1c1d7e
    bool isFirst() const            { return m_isFirst; }
Packit 1c1d7e
    bool isLast() const             { return m_isLast; }
Packit 1c1d7e
    void accept(DocVisitor *v)
Packit 1c1d7e
    { 
Packit 1c1d7e
      v->visitPre(this); 
Packit 1c1d7e
      QListIterator<DocPara> cli(m_paragraphs);
Packit 1c1d7e
      DocNode *n;
Packit 1c1d7e
      for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
Packit 1c1d7e
      v->visitPost(this); 
Packit 1c1d7e
    }
Packit 1c1d7e
    int parse(const QCString &cmdName);
Packit 1c1d7e
    int parseXml(const QCString &paramName);
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QList<DocPara>          m_paragraphs;
Packit 1c1d7e
    QList<DocNode>          m_params;
Packit 1c1d7e
    QList<DocNode>          m_paramTypes;
Packit 1c1d7e
    DocParamSect::Type      m_type;
Packit 1c1d7e
    DocParamSect::Direction m_dir;
Packit 1c1d7e
    bool                    m_isFirst;
Packit 1c1d7e
    bool                    m_isLast;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a simple list item */
Packit 1c1d7e
class DocSimpleListItem : public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocSimpleListItem(DocNode *parent)
Packit 1c1d7e
    { m_paragraph=new DocPara(this); m_parent = parent; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    virtual ~DocSimpleListItem() { delete m_paragraph; }
Packit 1c1d7e
    Kind kind() const            { return Kind_SimpleListItem; }
Packit 1c1d7e
    void accept(DocVisitor *v)
Packit 1c1d7e
    {
Packit 1c1d7e
      v->visitPre(this); 
Packit 1c1d7e
      m_paragraph->accept(v);
Packit 1c1d7e
      v->visitPost(this); 
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    DocPara *m_paragraph;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a HTML list item */
Packit 1c1d7e
class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlListItem(DocNode *parent,const HtmlAttribList &attribs,int num) : 
Packit 1c1d7e
      m_attribs(attribs), m_itemNum(num) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const                     { return Kind_HtmlListItem; }
Packit 1c1d7e
    int itemNumber() const                { return m_itemNum; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlListItem>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    int parseXml();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
    int            m_itemNum;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a HTML description data */
Packit 1c1d7e
class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlDescData(DocNode *parent) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const                     { return Kind_HtmlDescData; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlDescData>::accept(this,v); }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a HTML table cell */
Packit 1c1d7e
class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
    friend class DocHtmlTable;
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum Alignment { Left, Right, Center };
Packit 1c1d7e
    DocHtmlCell(DocNode *parent,const HtmlAttribList &attribs,bool isHeading) : 
Packit 1c1d7e
       m_isHeading(isHeading), 
Packit 1c1d7e
       m_isFirst(FALSE), m_isLast(FALSE), m_attribs(attribs),
Packit 1c1d7e
       m_rowIdx(-1), m_colIdx(-1) { m_parent = parent; }
Packit 1c1d7e
    bool isHeading() const      { return m_isHeading; }
Packit 1c1d7e
    bool isFirst() const        { return m_isFirst; }
Packit 1c1d7e
    bool isLast() const         { return m_isLast; }
Packit 1c1d7e
    Kind kind() const           { return Kind_HtmlCell; }
Packit 1c1d7e
    void accept(DocVisitor *v)  { CompAccept<DocHtmlCell>::accept(this,v); }
Packit 1c1d7e
    void markFirst(bool v=TRUE) { m_isFirst=v; }
Packit 1c1d7e
    void markLast(bool v=TRUE)  { m_isLast=v; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    int parseXml();
Packit 1c1d7e
    int rowIndex() const        { return m_rowIdx; }
Packit 1c1d7e
    int columnIndex() const     { return m_colIdx; }
Packit 1c1d7e
    int rowSpan() const;
Packit 1c1d7e
    int colSpan() const;
Packit 1c1d7e
    Alignment alignment() const;
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    void setRowIndex(int idx)    { m_rowIdx = idx; }
Packit 1c1d7e
    void setColumnIndex(int idx) { m_colIdx = idx; }
Packit 1c1d7e
    bool           m_isHeading;
Packit 1c1d7e
    bool           m_isFirst;
Packit 1c1d7e
    bool           m_isLast;
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
    int            m_rowIdx;
Packit 1c1d7e
    int            m_colIdx;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a HTML table caption */
Packit 1c1d7e
class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlCaption(DocNode *parent,const HtmlAttribList &attribs);
Packit 1c1d7e
    Kind kind() const          { return Kind_HtmlCaption; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlCaption>::accept(this,v); }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    bool hasCaptionId() const { return m_hasCaptionId; }
Packit 1c1d7e
    QCString file() const     { return m_file;         }
Packit 1c1d7e
    QCString anchor() const   { return m_anchor;       }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
    bool           m_hasCaptionId;
Packit 1c1d7e
    QCString       m_file;
Packit 1c1d7e
    QCString       m_anchor;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a HTML table row */
Packit 1c1d7e
class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
    friend class DocHtmlTable;
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlRow(DocNode *parent,const HtmlAttribList &attribs) : 
Packit 1c1d7e
      m_attribs(attribs), m_visibleCells(-1), m_rowIdx(-1) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const          { return Kind_HtmlRow; }
Packit 1c1d7e
    uint numCells() const      { return m_children.count(); }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlRow>::accept(this,v); }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    int parseXml(bool header);
Packit 1c1d7e
    bool isHeading() const     { // a row is a table heading if all cells are marked as such
Packit 1c1d7e
                                 bool heading=TRUE;
Packit 1c1d7e
                                 QListIterator<DocNode> it(m_children);
Packit 1c1d7e
                                 DocNode *n;
Packit 1c1d7e
                                 for (;(n=it.current());++it)
Packit 1c1d7e
                                 {
Packit 1c1d7e
                                   if (n->kind()==Kind_HtmlCell)
Packit 1c1d7e
                                   {
Packit 1c1d7e
                                     heading = heading && ((DocHtmlCell*)n)->isHeading();
Packit 1c1d7e
                                   }
Packit 1c1d7e
                                 }
Packit 1c1d7e
                                 return m_children.count()>0 && heading;
Packit 1c1d7e
                               }
Packit 1c1d7e
    void setVisibleCells(int n) { m_visibleCells = n; }
Packit 1c1d7e
    int visibleCells() const    { return m_visibleCells; }
Packit 1c1d7e
    int rowIndex() const        { return m_rowIdx; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    void setRowIndex(int idx)    { m_rowIdx = idx; }
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
    int m_visibleCells;
Packit 1c1d7e
    int m_rowIdx;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing a HTML table */
Packit 1c1d7e
class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlTable(DocNode *parent,const HtmlAttribList &attribs) 
Packit 1c1d7e
      : m_attribs(attribs) { m_caption=0; m_parent = parent; }
Packit 1c1d7e
    ~DocHtmlTable()         { delete m_caption; }
Packit 1c1d7e
    Kind kind() const       { return Kind_HtmlTable; }
Packit 1c1d7e
    uint numRows() const    { return m_children.count(); }
Packit 1c1d7e
    bool hasCaption()       { return m_caption!=0; }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    int parseXml();
Packit 1c1d7e
    uint numColumns() const { return m_numCols; }
Packit 1c1d7e
    void accept(DocVisitor *v);
Packit 1c1d7e
    DocHtmlCaption *caption() const { return m_caption; }
Packit 1c1d7e
    DocHtmlRow *firstRow() const {
Packit 1c1d7e
                             DocNode *n = m_children.getFirst();
Packit 1c1d7e
                             if (n && n->kind()==Kind_HtmlRow) return (DocHtmlRow*)n;
Packit 1c1d7e
                             return 0;
Packit 1c1d7e
                           }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    void computeTableGrid();
Packit 1c1d7e
    DocHtmlCaption    *m_caption;
Packit 1c1d7e
    HtmlAttribList     m_attribs;
Packit 1c1d7e
    int m_numCols;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Node representing an HTML blockquote */
Packit 1c1d7e
class DocHtmlBlockQuote : public CompAccept<DocHtmlBlockQuote>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocHtmlBlockQuote(DocNode *parent,const HtmlAttribList &attribs)
Packit 1c1d7e
      : m_attribs(attribs) { m_parent = parent; }
Packit 1c1d7e
    Kind kind() const       { return Kind_HtmlBlockQuote; }
Packit 1c1d7e
    int parse();
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocHtmlBlockQuote>::accept(this,v); }
Packit 1c1d7e
    const HtmlAttribList &attribs() const { return m_attribs; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    HtmlAttribList m_attribs;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Root node of a text fragment */
Packit 1c1d7e
class DocText : public CompAccept<DocText>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocText() {}
Packit 1c1d7e
    Kind kind() const       { return Kind_Text; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    bool isEmpty() const    { return m_children.isEmpty(); }
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Root node of documentation tree */
Packit 1c1d7e
class DocRoot : public CompAccept<DocRoot>, public DocNode
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    DocRoot(bool indent,bool sl) : m_indent(indent), m_singleLine(sl) {}
Packit 1c1d7e
    Kind kind() const       { return Kind_Root; }
Packit 1c1d7e
    void accept(DocVisitor *v) { CompAccept<DocRoot>::accept(this,v); }
Packit 1c1d7e
    void parse();
Packit 1c1d7e
    bool indent() const { return m_indent; }
Packit 1c1d7e
    bool singleLine() const { return m_singleLine; }
Packit 1c1d7e
    bool isEmpty() const { return m_children.isEmpty(); }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    bool m_indent;
Packit 1c1d7e
    bool m_singleLine;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
#endif