diff options
Diffstat (limited to 'src/docparser.h')
-rw-r--r-- | src/docparser.h | 1233 |
1 files changed, 0 insertions, 1233 deletions
diff --git a/src/docparser.h b/src/docparser.h deleted file mode 100644 index 8befd6a..0000000 --- a/src/docparser.h +++ /dev/null @@ -1,1233 +0,0 @@ -/****************************************************************************** - * - * - * - * - * Copyright (C) 1997-2005 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 _DOCPARSER_H -#define _DOCPARSER_H - -#include <stdio.h> - -#include <qlist.h> -#include <qstrlist.h> -#include <qstring.h> - -#include "docvisitor.h" -#include "htmlattrib.h" - -class DocNode; -class MemberDef; -class Definition; -class MemberGroup; -class SectionDict; - -//--------------------------------------------------------------------------- - -/*! Initialize the documentation parser */ -void initDocParser(); - -/*! Main entry point for the documentation parser. - * @param fileName File in which the documentation block is found (or the - * name of the example file in case isExample is TRUE). - * @param startLine Line at which the documentation block is found. - * @param context Class or namespace to which this block belongs. - * @param md Member definition to which the documentation belongs. - * Can be 0. - * @param input String representation of the documentation block. - * @param indexWords Indicates whether or not words should be put in the - * search index. - * @param isExample TRUE if the documentation belongs to an example. - * @param exampleName Base name of the example file (0 if isExample is FALSE). - * @param singleLine Output should be presented on a single line, so without - * starting a new paragraph at the end. - * @param linkFromIndex TRUE if the documentation is generated from an - * index page. In this case context is not used to determine - * the relative path when making a link. - * @returns Root node of the abstract syntax tree. Ownership of the - * pointer is handed over to the caller. - */ -DocNode *validatingParseDoc(const char *fileName,int startLine, - Definition *context, MemberDef *md, - const char *input,bool indexWords, - bool isExample,const char *exampleName=0, - bool singleLine=FALSE,bool linkFromIndex=FALSE); - -/*! Main entry point for parsing simple text fragments. These - * fragments are limited to words, whitespace and symbols. - */ -DocNode *validatingParseText(const char *input); - -/*! Searches for section and anchor commands in the input */ -void docFindSections(const char *input, - Definition *d, - MemberGroup *m, - const char *fileName); - -//--------------------------------------------------------------------------- - -/*! @brief Abstract node interface with type information. */ -class DocNode -{ - public: - /*! Available node types. */ - enum Kind { Kind_Root = 0, - Kind_Word = 1, - Kind_WhiteSpace = 2, - Kind_Para = 3, - Kind_AutoList = 4, - Kind_AutoListItem = 5, - Kind_Symbol = 6, - Kind_URL = 7, - Kind_StyleChange = 8, - Kind_SimpleSect = 9, - Kind_Title = 10, - Kind_SimpleList = 11, - Kind_SimpleListItem = 12, - Kind_Section = 13, - Kind_Verbatim = 14, - Kind_XRefItem = 15, - Kind_HtmlList = 16, - Kind_HtmlListItem = 17, - Kind_HtmlDescList = 18, - Kind_HtmlDescData = 19, - Kind_HtmlDescTitle = 20, - Kind_HtmlTable = 21, - Kind_HtmlRow = 22, - Kind_HtmlCell = 23, - Kind_HtmlCaption = 24, - Kind_LineBreak = 25, - Kind_HorRuler = 26, - Kind_Anchor = 27, - Kind_IndexEntry = 28, - Kind_Internal = 29, - Kind_HRef = 30, - Kind_Include = 31, - Kind_IncOperator = 32, - Kind_HtmlHeader = 33, - Kind_Image = 34, - Kind_DotFile = 35, - Kind_Link = 36, - Kind_Ref = 37, - Kind_Formula = 38, - Kind_SecRefItem = 39, - Kind_SecRefList = 40, - //Kind_Language = 41, - Kind_LinkedWord = 42, - Kind_ParamSect = 43, - Kind_ParamList = 44, - Kind_InternalRef = 45, - Kind_Copy = 46, - Kind_Text = 47 - }; - /*! Creates a new node */ - DocNode() : m_insidePre(FALSE) {} - - /*! Destroys a node. */ - virtual ~DocNode() {} - - /*! Returns the kind of node. Provides runtime type information */ - virtual Kind kind() const = 0; - - /*! Returns the parent of this node or 0 for the root node. */ - virtual DocNode *parent() const = 0; - - /*! Acceptor function for node visitors. Part of the visitor pattern. - * @param v Abstract visitor. - */ - virtual void accept(DocVisitor *v) = 0; - - /*! Returns TRUE iff this node is inside a preformatted section */ - bool isPreformatted() const { return m_insidePre; } - - protected: - /*! Sets whether or not this item is inside a preformatted section */ - void setInsidePreformatted(bool p) { m_insidePre = p; } - private: - - bool m_insidePre; -}; - -/*! @brief Default accept implementation for compound nodes in the abstract - * syntax tree. - */ -template<class T> class CompAccept -{ - public: - CompAccept() { m_children.setAutoDelete(TRUE); } - void accept(T *obj, DocVisitor *v) - { - v->visitPre(obj); - QListIterator<DocNode> cli(m_children); - DocNode *n; - for (cli.toFirst();(n=cli.current());++cli) n->accept(v); - v->visitPost(obj); - } - - protected: - QList<DocNode> m_children; -}; - - -/*! @brief Node representing a word - */ -class DocWord : public DocNode -{ - public: - DocWord(DocNode *parent,const QString &word); - QString word() const { return m_word; } - Kind kind() const { return Kind_Word; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - - private: - DocNode *m_parent; - QString m_word; -}; - -/*! @brief Node representing a word that can be linked to something - */ -class DocLinkedWord : public DocNode -{ - public: - DocLinkedWord(DocNode *parent,const QString &word, - const QString &ref,const QString &file, - const QString &anchor); - QString word() const { return m_word; } - Kind kind() const { return Kind_LinkedWord; } - DocNode *parent() const { return m_parent; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString ref() const { return m_ref; } - QString anchor() const { return m_anchor; } - void accept(DocVisitor *v) { v->visit(this); } - - private: - DocNode *m_parent; - QString m_word; - QString m_ref; - QString m_file; - QString m_relPath; - QString m_anchor; -}; - -/*! @brief Node representing an URL (or email address) */ -class DocURL : public DocNode -{ - public: - DocURL(DocNode *parent,const QString &url,bool isEmail) : - m_parent(parent), m_url(url), m_isEmail(isEmail) {} - QString url() const { return m_url; } - Kind kind() const { return Kind_URL; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - bool isEmail() const { return m_isEmail; } - - private: - DocNode *m_parent; - QString m_url; - bool m_isEmail; -}; - -/*! @brief Node representing a line break */ -class DocLineBreak : public DocNode -{ - public: - DocLineBreak(DocNode *parent) : - m_parent(parent) {} - Kind kind() const { return Kind_LineBreak; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - - private: - DocNode *m_parent; -}; - -/*! @brief Node representing a horizonal ruler */ -class DocHorRuler : public DocNode -{ - public: - DocHorRuler(DocNode *parent) : - m_parent(parent) {} - Kind kind() const { return Kind_HorRuler; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - - private: - DocNode *m_parent; -}; - -/*! @brief Node representing an anchor */ -class DocAnchor : public DocNode -{ - public: - DocAnchor(DocNode *parent,const QString &id,bool newAnchor); - Kind kind() const { return Kind_Anchor; } - DocNode *parent() const { return m_parent; } - QString anchor() const { return m_anchor; } - QString file() const { return m_file; } - void accept(DocVisitor *v) { v->visit(this); } - - private: - DocNode *m_parent; - QString m_anchor; - QString m_file; -}; - -/*! @brief Node representing a style change */ -class DocStyleChange : public DocNode -{ - public: - enum Style { Bold, Italic, Code, Center, Small, - Subscript, Superscript, Preformatted, - Span, Div - }; - DocStyleChange(DocNode *parent,uint position,Style s,bool enable, - const HtmlAttribList *attribs=0) : - m_parent(parent), m_position(position), m_style(s), m_enable(enable) - { if (attribs) m_attribs=*attribs; } - Kind kind() const { return Kind_StyleChange; } - Style style() const { return m_style; } - const char *styleString() const; - bool enable() const { return m_enable; } - uint position() const { return m_position; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - const HtmlAttribList &attribs() const { return m_attribs; } - - private: - DocNode *m_parent; - uint m_position; - Style m_style; - bool m_enable; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a special symbol */ -class DocSymbol : public DocNode -{ - public: - enum SymType { Unknown=0, BSlash,At,Less,Greater,Amp,Dollar,Hash,Percent, - Copy, Tm, Reg, Apos, Quot, Uml, Acute, Grave, Circ, Tilde, Szlig, - Cedil, Ring, Nbsp, Slash - }; - DocSymbol(DocNode *parent,SymType s,char letter='\0') : - m_parent(parent), m_symbol(s), m_letter(letter) {} - SymType symbol() const { return m_symbol; } - char letter() const { return m_letter; } - Kind kind() const { return Kind_Symbol; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - static SymType decodeSymbol(const QString &symName,char *letter); - - private: - DocNode *m_parent; - SymType m_symbol; - char m_letter; -}; - -/*! @brief Node representing some amount of white space */ -class DocWhiteSpace : public DocNode -{ - public: - DocWhiteSpace(DocNode *parent,const QString &chars) : - m_parent(parent), m_chars(chars) {} - Kind kind() const { return Kind_WhiteSpace; } - QString chars() const { return m_chars; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - private: - DocNode *m_parent; - QString m_chars; -}; - -/*! @brief Node representing a verbatim, unparsed text fragment */ -class DocVerbatim : public DocNode -{ - public: - enum Type { Code, HtmlOnly, ManOnly, LatexOnly, XmlOnly, Verbatim, Dot }; - DocVerbatim(DocNode *parent,const QString &context, - const QString &text, Type t,bool isExample, - const QString &exampleFile); - Kind kind() const { return Kind_Verbatim; } - Type type() const { return m_type; } - QString text() const { return m_text; } - QString context() const { return m_context; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - bool isExample() const { return m_isExample; } - QString exampleFile() const { return m_exampleFile; } - QString relPath() const { return m_relPath; } - - private: - DocNode *m_parent; - QString m_context; - QString m_text; - Type m_type; - bool m_isExample; - QString m_exampleFile; - QString m_relPath; -}; - - -/*! @brief Node representing an included text block from file */ -class DocInclude : public DocNode -{ - public: - enum Type { Include, DontInclude, VerbInclude, HtmlInclude, IncWithLines }; - DocInclude(DocNode *parent,const QString &file, - const QString context, Type t, - bool isExample,const QString exampleFile) : - m_parent(parent), m_file(file), m_context(context), m_type(t), - m_isExample(isExample), m_exampleFile(exampleFile) {} - Kind kind() const { return Kind_Include; } - QString file() const { return m_file; } - QString extension() const { int i=m_file.findRev('.'); - if (i!=-1) - return m_file.right(m_file.length()-i); - else - return ""; - } - Type type() const { return m_type; } - QString text() const { return m_text; } - QString context() const { return m_context; } - DocNode *parent() const { return m_parent; } - bool isExample() const { return m_isExample; } - QString exampleFile() const { return m_exampleFile; } - void accept(DocVisitor *v) { v->visit(this); } - void parse(); - - private: - DocNode *m_parent; - QString m_file; - QString m_context; - QString m_text; - Type m_type; - bool m_isExample; - QString m_exampleFile; -}; - -/*! @brief Node representing a include/dontinclude operator block */ -class DocIncOperator : public DocNode -{ - public: - enum Type { Line, SkipLine, Skip, Until }; - DocIncOperator(DocNode *parent,Type t,const QString &pat, - const QString &context,bool isExample,const QString &exampleFile) : - m_parent(parent), m_type(t), m_pattern(pat), m_context(context), - m_isFirst(FALSE), m_isLast(FALSE), - m_isExample(isExample), m_exampleFile(exampleFile) {} - Kind kind() const { return Kind_IncOperator; } - Type type() const { return m_type; } - QString text() const { return m_text; } - QString pattern() const { return m_pattern; } - QString context() const { return m_context; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - bool isFirst() const { return m_isFirst; } - bool isLast() const { return m_isLast; } - void markFirst(bool v=TRUE) { m_isFirst = v; } - void markLast(bool v=TRUE) { m_isLast = v; } - bool isExample() const { return m_isExample; } - QString exampleFile() const { return m_exampleFile; } - void parse(); - - private: - DocNode *m_parent; - Type m_type; - QString m_text; - QString m_pattern; - QString m_context; - bool m_isFirst; - bool m_isLast; - bool m_isExample; - QString m_exampleFile; -}; - -/*! @brief Node representing an item of a cross-referenced list */ -class DocFormula : public DocNode -{ - public: - DocFormula(DocNode *parent,int id); - Kind kind() const { return Kind_Formula; } - QString name() const { return m_name; } - QString text() const { return m_text; } - QString relPath() const { return m_relPath; } - int id() const { return m_id; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - - private: - DocNode *m_parent; - QString m_name; - QString m_text; - QString m_relPath; - int m_id; -}; - -/*! @brief Node representing an entry in the index. */ -class DocIndexEntry : public DocNode -{ - public: - DocIndexEntry(DocNode *parent) : m_parent(parent) { } - Kind kind() const { return Kind_IndexEntry; } - int parse(); - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { v->visit(this); } - QString entry() { return m_entry; } - - private: - DocNode *m_parent; - QString m_entry; -}; - -//----------------------------------------------------------------------- - -/*! @brief Node representing a entry in the index. */ -class DocCopy : public CompAccept<DocCopy>, public DocNode -{ - public: - DocCopy(DocNode *parent,const QString &link) - : m_parent(parent), m_link(link) { } - Kind kind() const { return Kind_IndexEntry; } - QString link() const { return m_link; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocCopy>::accept(this,v); } - void parse(); - - private: - DocNode *m_parent; - QString m_link; -}; - -/*! @brief Node representing an auto List */ -class DocAutoList : public CompAccept<DocAutoList>, public DocNode -{ - public: - DocAutoList(DocNode *parent,int indent,bool isEnumList, - int depth) : - m_parent(parent), m_indent(indent), m_isEnumList(isEnumList), - m_depth(depth) {} - Kind kind() const { return Kind_AutoList; } - bool isEnumList() const { return m_isEnumList; } - int indent() const { return m_indent; } - DocNode *parent() const { return m_parent; } - int depth() const { return m_depth; } - void accept(DocVisitor *v) { CompAccept<DocAutoList>::accept(this,v); } - int parse(); - - private: - DocNode *m_parent; - int m_indent; - bool m_isEnumList; - int m_depth; -}; - - -/*! @brief Node representing a simple section title */ -class DocTitle : public CompAccept<DocTitle>, public DocNode -{ - public: - DocTitle(DocNode *parent) : m_parent(parent) {} - void parse(); - void parseFromString(const QString &title); - Kind kind() const { return Kind_Title; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocTitle>::accept(this,v); } - - private: - DocNode *m_parent; -}; - -/*! @brief Node representing an item of a cross-referenced list */ -class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode -{ - public: - //enum Type { Bug, Test, Todo, Deprecated }; - DocXRefItem(DocNode *parent,int id,const char *key); - Kind kind() const { return Kind_XRefItem; } - QString file() const { return m_file; } - QString anchor() const { return m_anchor; } - QString title() const { return m_title; } - DocNode *parent() const { return m_parent; } - QString relPath() const { return m_relPath; } - QString key() const { return m_key; } - void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); } - bool parse(); - - private: - DocNode *m_parent; - int m_id; - QString m_key; - QString m_file; - QString m_anchor; - QString m_title; - QString m_relPath; -}; - -/*! @brief Node representing an image */ -class DocImage : public CompAccept<DocImage>, public DocNode -{ - public: - enum Type { Html, Latex, Rtf }; - DocImage(DocNode *parent,const HtmlAttribList &attribs,const QString &name,Type t); - Kind kind() const { return Kind_Image; } - Type type() const { return m_type; } - QString name() const { return m_name; } - DocNode *parent() const { return m_parent; } - bool hasCaption() const { return !m_children.isEmpty(); } - QString width() const { return m_width; } - QString height() const { return m_height; } - QString relPath() const { return m_relPath; } - const HtmlAttribList &attribs() const { return m_attribs; } - void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); } - void parse(); - - private: - DocNode *m_parent; - HtmlAttribList m_attribs; - QString m_name; - Type m_type; - QString m_width; - QString m_height; - QString m_relPath; -}; - -/*! @brief Node representing a dot file */ -class DocDotFile : public CompAccept<DocDotFile>, public DocNode -{ - public: - DocDotFile(DocNode *parent,const QString &name); - void parse(); - Kind kind() const { return Kind_DotFile; } - QString name() const { return m_name; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - bool hasCaption() const { return !m_children.isEmpty(); } - QString width() const { return m_width; } - QString height() const { return m_height; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); } - private: - DocNode *m_parent; - QString m_name; - QString m_file; - QString m_relPath; - QString m_width; - QString m_height; -}; - -/*! @brief Node representing a link to some item */ -class DocLink : public CompAccept<DocLink>, public DocNode -{ - public: - DocLink(DocNode *parent,const QString &target); - QString parse(bool); - Kind kind() const { return Kind_Link; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString ref() const { return m_ref; } - QString anchor() const { return m_anchor; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocLink>::accept(this,v); } - - private: - DocNode *m_parent; - QString m_file; - QString m_relPath; - QString m_ref; - QString m_anchor; - QString m_refText; -}; - -/*! @brief Node representing a reference to some item */ -class DocRef : public CompAccept<DocRef>, public DocNode -{ - public: - DocRef(DocNode *parent,const QString &target); - void parse(); - Kind kind() const { return Kind_Ref; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString ref() const { return m_ref; } - QString anchor() const { return m_anchor; } - QString targetTitle() const { return m_text; } - DocNode *parent() const { return m_parent; } - bool hasLinkText() const { return !m_children.isEmpty(); } - bool refToAnchor() const { return m_refToAnchor; } - bool refToSection() const { return m_refToSection; } - void accept(DocVisitor *v) { CompAccept<DocRef>::accept(this,v); } - - private: - DocNode * m_parent; - bool m_refToSection; - bool m_refToAnchor; - QString m_file; - QString m_relPath; - QString m_ref; - QString m_anchor; - QString m_text; -}; - -/*! @brief Node representing an internal reference to some item */ -class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode -{ - public: - DocInternalRef(DocNode *parent,const QString &target); - void parse(); - Kind kind() const { return Kind_Ref; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString anchor() const { return m_anchor; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocInternalRef>::accept(this,v); } - - private: - DocNode * m_parent; - QString m_file; - QString m_relPath; - QString m_anchor; -}; - -/*! @brief Node representing a Language specific section */ -//class DocLanguage : public CompAccept<DocLanguage>, public DocNode -//{ -// public: -// DocLanguage(DocNode *parent,const QString &id) : -// m_parent(parent), m_id(id) {} -// QString id() const { return m_id; } -// Kind kind() const { return Kind_Language; } -// DocNode *parent() const { return m_parent; } -// void accept(DocVisitor *v) { CompAccept<DocLanguage>::accept(this,v); } -// int parse(); -// -// private: -// DocNode * m_parent; -// QString m_id; -//}; - -/*! @brief Node representing a Hypertext reference */ -class DocHRef : public CompAccept<DocHRef>, public DocNode -{ - public: - DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QString &url) : - m_parent(parent), m_attribs(attribs), m_url(url) {} - int parse(); - QString url() const { return m_url; } - Kind kind() const { return Kind_HRef; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); } - const HtmlAttribList &attribs() const { return m_attribs; } - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; - QString m_url; -}; - -/*! @brief Node Html heading */ -class DocHtmlHeader : public CompAccept<DocHtmlHeader>, public DocNode -{ - public: - DocHtmlHeader(DocNode *parent,const HtmlAttribList &attribs,int level) : - m_parent(parent), m_level(level), m_attribs(attribs) {} - int level() const { return m_level; } - Kind kind() const { return Kind_HtmlHeader; } - const HtmlAttribList &attribs() const { return m_attribs; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlHeader>::accept(this,v); } - int parse(); - - private: - DocNode * m_parent; - int m_level; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a Html description item */ -class DocHtmlDescTitle : public CompAccept<DocHtmlDescTitle>, public DocNode -{ - public: - DocHtmlDescTitle(DocNode *parent,const HtmlAttribList &attribs) : - m_parent(parent), m_attribs(attribs) {} - Kind kind() const { return Kind_HtmlDescTitle; } - DocNode *parent() const { return m_parent; } - const HtmlAttribList &attribs() const { return m_attribs; } - void accept(DocVisitor *v) { CompAccept<DocHtmlDescTitle>::accept(this,v); } - int parse(); - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a Html description list */ -class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode -{ - public: - DocHtmlDescList(DocNode *parent,const HtmlAttribList &attribs) - : m_parent(parent), m_attribs(attribs) {} - Kind kind() const { return Kind_HtmlDescList; } - DocNode *parent() const { return m_parent; } - const HtmlAttribList &attribs() const { return m_attribs; } - void accept(DocVisitor *v) { CompAccept<DocHtmlDescList>::accept(this,v); } - int parse(); - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a normal section */ -class DocSection : public CompAccept<DocSection>, public DocNode -{ - public: - DocSection(DocNode *parent,int level,const QString &id) : - m_parent(parent), m_level(level), m_id(id) {} - Kind kind() const { return Kind_Section; } - int level() const { return m_level; } - QString title() const { return m_title; } - QString anchor() const { return m_anchor; } - QString id() const { return m_id; } - QString file() const { return m_file; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocSection>::accept(this,v); } - int parse(); - - private: - DocNode *m_parent; - int m_level; - QString m_id; - QString m_title; - QString m_anchor; - QString m_file; -}; - -/*! @brief Node representing a reference to a section */ -class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode -{ - public: - DocSecRefItem(DocNode *parent,const QString &target) : - m_parent(parent), m_target(target) {} - Kind kind() const { return Kind_SecRefItem; } - QString target() const { return m_target; } - QString file() const { return m_file; } - QString anchor() const { return m_anchor; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocSecRefItem>::accept(this,v); } - void parse(); - - private: - DocNode *m_parent; - QString m_target; - QString m_file; - QString m_anchor; -}; - -/*! @brief Node representing a list of section references */ -class DocSecRefList : public CompAccept<DocSecRefList>, public DocNode -{ - public: - DocSecRefList(DocNode *parent) : m_parent(parent) {} - void parse(); - Kind kind() const { return Kind_SecRefList; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocSecRefList>::accept(this,v); } - - private: - DocNode *m_parent; -}; - -/*! @brief Node representing an internal section of documentation */ -class DocInternal : public CompAccept<DocInternal>, public DocNode -{ - public: - DocInternal(DocNode *parent) : m_parent(parent) {} - int parse(int); - Kind kind() const { return Kind_Internal; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); } - - private: - DocNode *m_parent; -}; - -/*! @brief Node representing a simple list */ -class DocSimpleList : public CompAccept<DocSimpleList>, public DocNode -{ - public: - DocSimpleList(DocNode *parent) : m_parent(parent) {} - Kind kind() const { return Kind_SimpleList; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocSimpleList>::accept(this,v); } - int parse(); - - private: - DocNode *m_parent; -}; - -/*! @brief Node representing a Html list */ -class DocHtmlList : public CompAccept<DocHtmlList>, public DocNode -{ - public: - enum Type { Unordered, Ordered }; - DocHtmlList(DocNode *parent,const HtmlAttribList &attribs,Type t) : - m_parent(parent), m_type(t), m_attribs(attribs) {} - Kind kind() const { return Kind_HtmlList; } - Type type() const { return m_type; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlList>::accept(this,v); } - const HtmlAttribList &attribs() const { return m_attribs; } - int parse(); - int parseXml(); - - private: - DocNode * m_parent; - Type m_type; - HtmlAttribList m_attribs; -}; - -/*! Node representing a simple section */ -class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode -{ - public: - enum Type - { - Unknown, See, Return, Author, Authors, Version, Since, Date, - Note, Warning, Pre, Post, Invar, Remark, Attention, User, Rcs - }; - DocSimpleSect(DocNode *parent,Type t); - virtual ~DocSimpleSect(); - Kind kind() const { return Kind_SimpleSect; } - Type type() const { return m_type; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v); - int parse(bool userTitle); - int parseRcs(); - int parseXml(); - void appendLinkWord(const QString &word); - - private: - DocNode * m_parent; - Type m_type; - DocTitle * m_title; -}; - -/*! Node representing a parameter section */ -class DocParamSect : public CompAccept<DocParamSect>, public DocNode -{ - public: - enum Type - { - Unknown, Param, RetVal, Exception - }; - enum Direction - { - In=1, Out=2, InOut=3, Unspecified=0 - }; - DocParamSect(DocNode *parent,Type t) - : m_parent(parent), m_type(t) {} - int parse(const QString &cmdName,bool xmlContext,Direction d); - Kind kind() const { return Kind_ParamSect; } - Type type() const { return m_type; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocParamSect>::accept(this,v); } - - private: - DocNode * m_parent; - Type m_type; - Direction m_dir; -}; - -/*! Node representing a paragraph in the documentation tree */ -class DocPara : public CompAccept<DocPara>, public DocNode -{ - public: - DocPara(DocNode *parent) : m_parent(parent), - m_isFirst(FALSE), m_isLast(FALSE) {} - int parse(); - Kind kind() const { return Kind_Para; } - DocNode *parent() const { return m_parent; } - bool isEmpty() const { return m_children.isEmpty(); } - void accept(DocVisitor *v) { CompAccept<DocPara>::accept(this,v); } - void markFirst(bool v=TRUE) { m_isFirst=v; } - void markLast(bool v=TRUE) { m_isLast=v; } - bool isFirst() const { return m_isFirst; } - bool isLast() const { return m_isLast; } - const QList<DocNode> &children() const { return m_children; } - - int handleCommand(const QString &cmdName); - int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs); - int handleHtmlEndTag(const QString &tagName); - int handleSimpleSection(DocSimpleSect::Type t,bool xmlContext=FALSE); - int handleXRefItem(); - int handleParamSection(const QString &cmdName,DocParamSect::Type t, - bool xmlContext, - int direction); - void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t); - void handleImage(const QString &cmdName); - void handleDotFile(const QString &cmdName); - void handleInclude(const QString &cmdName,DocInclude::Type t); - void handleLink(const QString &cmdName,bool isJavaLink); - void handleRef(const QString &cmdName); - void handleSection(const QString &cmdName); - void handleInheritDoc(); - int handleStartCode(); - int handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level); - bool injectToken(int tok,const QString &tokText); - - private: - DocNode *m_parent; - QString m_sectionId; - bool m_isFirst; - bool m_isLast; -}; - -/*! @brief Node representing a parameter list. */ -class DocParamList : public DocNode -{ - public: - DocParamList(DocNode *parent,DocParamSect::Type t,DocParamSect::Direction d) - : m_parent(parent) , m_type(t), m_dir(d), m_isFirst(TRUE), m_isLast(TRUE) - { m_paragraphs.setAutoDelete(TRUE); } - virtual ~DocParamList() { } - Kind kind() const { return Kind_ParamList; } - DocNode *parent() const { return m_parent; } - const QList<DocNode> ¶meters() { return m_params; } - DocParamSect::Type type() const { return m_type; } - DocParamSect::Direction direction() const { return m_dir; } - void markFirst(bool b=TRUE) { m_isFirst=b; } - void markLast(bool b=TRUE) { m_isLast=b; } - bool isFirst() const { return m_isFirst; } - bool isLast() const { return m_isLast; } - void accept(DocVisitor *v) - { - v->visitPre(this); - QListIterator<DocPara> cli(m_paragraphs); - DocNode *n; - for (cli.toFirst();(n=cli.current());++cli) n->accept(v); - v->visitPost(this); - } - int parse(const QString &cmdName); - int parseXml(const QString ¶mName); - - private: - DocNode * m_parent; - QList<DocPara> m_paragraphs; - QList<DocNode> m_params; - DocParamSect::Type m_type; - DocParamSect::Direction m_dir; - bool m_isFirst; - bool m_isLast; -}; - -/*! @brief Node representing an item of a auto list */ -class DocAutoListItem : public DocNode -{ - public: - DocAutoListItem(DocNode *parent,int num) : m_parent(parent), m_itemNum(num) - { m_paragraph=new DocPara(this); } - virtual ~DocAutoListItem() { delete m_paragraph; } - Kind kind() const { return Kind_AutoListItem; } - DocNode *parent() const { return m_parent; } - int itemNumber() const { return m_itemNum; } - void accept(DocVisitor *v) - { - v->visitPre(this); - m_paragraph->accept(v); - v->visitPost(this); - } - int parse(); - - private: - DocNode *m_parent; - DocPara *m_paragraph; - int m_itemNum; -}; - -/*! @brief Node representing a simple list item */ -class DocSimpleListItem : public DocNode -{ - public: - DocSimpleListItem(DocNode *parent) : m_parent(parent) - { m_paragraph=new DocPara(this); } - int parse(); - virtual ~DocSimpleListItem() { delete m_paragraph; } - Kind kind() const { return Kind_SimpleListItem; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) - { - v->visitPre(this); - m_paragraph->accept(v); - v->visitPost(this); - } - - private: - DocNode *m_parent; - DocPara *m_paragraph; -}; - -/*! @brief Node representing a HTML list item */ -class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode -{ - public: - DocHtmlListItem(DocNode *parent,const HtmlAttribList &attribs,int num) : - m_parent(parent), m_attribs(attribs), m_itemNum(num) {} - Kind kind() const { return Kind_HtmlListItem; } - int itemNumber() const { return m_itemNum; } - const HtmlAttribList &attribs() const { return m_attribs; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlListItem>::accept(this,v); } - int parse(); - int parseXml(); - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; - int m_itemNum; -}; - -/*! @brief Node representing a HTML description data */ -class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode -{ - public: - DocHtmlDescData(DocNode *parent) : - m_parent(parent) {} - Kind kind() const { return Kind_HtmlDescData; } - const HtmlAttribList &attribs() const { return m_attribs; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlDescData>::accept(this,v); } - int parse(); - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a HTML table cell */ -class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode -{ - public: - DocHtmlCell(DocNode *parent,const HtmlAttribList &attribs,bool isHeading) : - m_parent(parent), m_isHeading(isHeading), - m_isFirst(FALSE), m_isLast(FALSE), m_attribs(attribs) {} - bool isHeading() const { return m_isHeading; } - bool isFirst() const { return m_isFirst; } - bool isLast() const { return m_isLast; } - Kind kind() const { return Kind_HtmlCell; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlCell>::accept(this,v); } - void markFirst(bool v=TRUE) { m_isFirst=v; } - void markLast(bool v=TRUE) { m_isLast=v; } - const HtmlAttribList &attribs() const { return m_attribs; } - int parse(); - - private: - DocNode * m_parent; - bool m_isHeading; - bool m_isFirst; - bool m_isLast; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a HTML table caption */ -class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode -{ - public: - DocHtmlCaption(DocNode *parent,const HtmlAttribList &attribs) : - m_parent(parent), m_attribs(attribs) {} - Kind kind() const { return Kind_HtmlCaption; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlCaption>::accept(this,v); } - const HtmlAttribList &attribs() const { return m_attribs; } - int parse(); - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; - bool m_atTop; -}; - -/*! @brief Node representing a HTML table row */ -class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode -{ - public: - DocHtmlRow(DocNode *parent,const HtmlAttribList &attribs) - : m_parent(parent), m_attribs(attribs) {} - Kind kind() const { return Kind_HtmlRow; } - DocNode *parent() const { return m_parent; } - uint numCells() const { return m_children.count(); } - void accept(DocVisitor *v) { CompAccept<DocHtmlRow>::accept(this,v); } - const HtmlAttribList &attribs() const { return m_attribs; } - int parse(); - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; -}; - -/*! @brief Node representing a HTML table */ -class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode -{ - public: - DocHtmlTable(DocNode *parent,const HtmlAttribList &attribs) - : m_parent(parent), m_attribs(attribs) - { m_caption=0; } - ~DocHtmlTable() { delete m_caption; } - Kind kind() const { return Kind_HtmlTable; } - DocNode *parent() const { return m_parent; } - uint numRows() const { return m_children.count(); } - bool hasCaption() { return m_caption!=0; } - const HtmlAttribList &attribs() const { return m_attribs; } - int parse(); - uint numCols() const; - void accept(DocVisitor *v); - - private: - DocNode * m_parent; - DocHtmlCaption *m_caption; - HtmlAttribList m_attribs; -}; - -/*! @brief Root node of a text fragment */ -class DocText : public CompAccept<DocText>, public DocNode -{ - public: - DocText() {} - Kind kind() const { return Kind_Text; } - DocNode *parent() const { return 0; } - void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); } - void parse(); -}; - -/*! @brief Root node of documentation tree */ -class DocRoot : public CompAccept<DocRoot>, public DocNode -{ - public: - DocRoot(bool indent,bool sl) : m_indent(indent), m_singleLine(sl) {} - Kind kind() const { return Kind_Root; } - DocNode *parent() const { return 0; } - void accept(DocVisitor *v) { CompAccept<DocRoot>::accept(this,v); } - void parse(); - bool indent() const { return m_indent; } - bool singleLine() const { return m_singleLine; } - - private: - bool m_indent; - bool m_singleLine; -}; - - -#endif |