/****************************************************************************** * * $Id$ * * * Copyright (C) 1997-2001 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. * */ #ifndef _DOCHANDLER_H #define _DOCHANDLER_H #include #include #include #include "basehandler.h" class ParagraphHandler; //----------------------------------------------------------------------------- /*! \brief Node of a structured documentation tree. * */ class DocNode { public: enum Markup { Normal = 0x00, Bold = 0x01, Emphasis = 0x02, ComputerOutput = 0x04, Subscript = 0x08, Superscript = 0x10, SmallFont = 0x20, Center = 0x40 }; enum NodeKind { Para, Text, MarkupModifier, ItemizedList, OrderedList, ListItem, ParameterList }; DocNode(NodeKind k) : m_kind(k) {} virtual ~DocNode() {} private: NodeKind m_kind; }; //----------------------------------------------------------------------------- /*! \brief Node representing a piece of text. * */ class TextNode : public DocNode { public: TextNode(const QString &t,int markup) : DocNode(Text), m_text(t), m_markup(markup) {} private: QString m_text; int m_markup; }; //----------------------------------------------------------------------------- /*! \brief Node representing a change in the markup style. * */ class MarkupModifierNode : public DocNode { public: MarkupModifierNode(int markup,bool enabled) : DocNode(MarkupModifier), m_markup(markup), m_enabled(enabled) {} private: int m_markup; bool m_enabled; }; //----------------------------------------------------------------------------- /*! \brief Handles markup commands in the XML input. * */ class MarkupHandler : public BaseFallBackHandler { public: MarkupHandler(QList &children,QString &curString); virtual ~MarkupHandler(); int markup() const { return m_curMarkup; } virtual void startBold(const QXmlAttributes &attrib); virtual void endBold(); virtual void startEmphasis(const QXmlAttributes &attrib); virtual void endEmphasis(); virtual void startComputerOutput(const QXmlAttributes &attrib); virtual void endComputerOutput(); virtual void startCenter(const QXmlAttributes &attrib); virtual void endCenter(); virtual void startSmallFont(const QXmlAttributes &attrib); virtual void endSmallFont(); virtual void startSubscript(const QXmlAttributes &attrib); virtual void endSubscript(); virtual void startSuperscript(const QXmlAttributes &attrib); virtual void endSuperscript(); private: void addTextNode(); QList &m_children; QString &m_curString; int m_curMarkup; }; //----------------------------------------------------------------------------- /*! \brief Node representing a list item. * */ class ListItemHandler : public DocNode, public BaseHandler { public: ListItemHandler(IBaseHandler *parent); virtual ~ListItemHandler(); virtual void startListItem(const QXmlAttributes& attrib); virtual void endListItem(); virtual void startParagraph(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; QList m_children; }; //----------------------------------------------------------------------------- /*! \brief Node representing list of items. * */ class ListHandler : public DocNode, public BaseHandler { public: ListHandler(NodeKind k,IBaseHandler *parent); virtual ~ListHandler(); virtual void startList(const QXmlAttributes& attrib); virtual void endList(); virtual void startListItem(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; QList m_children; }; //----------------------------------------------------------------------------- /*! \brief Node representing a parameter. * */ class ParameterHandler : public DocNode, public BaseHandler { public: ParameterHandler(IBaseHandler *parent); virtual ~ParameterHandler(); virtual void startParameterList(const QXmlAttributes& attrib); virtual void endParameterList(); private: IBaseHandler *m_parent; QString m_name; ParagraphHandler *m_description; }; //----------------------------------------------------------------------------- /* \brief Node representing a parameter list. * */ class ParameterListHandler : public DocNode, public BaseHandler { public: ParameterListHandler(IBaseHandler *parent); virtual ~ParameterListHandler(); virtual void startParameterList(const QXmlAttributes& attrib); virtual void endParameterList(); private: IBaseHandler *m_parent; QList m_parameters; ParameterHandler *m_curParam; }; //----------------------------------------------------------------------------- /*! \brief Node representing a paragraph of text and commands. * */ class ParagraphHandler : public DocNode, public BaseHandler { public: virtual void startParagraph(const QXmlAttributes& attrib); virtual void endParagraph(); virtual void startItemizedList(const QXmlAttributes& attrib); virtual void startOrderedList(const QXmlAttributes& attrib); virtual void startParameterList(const QXmlAttributes& attrib); ParagraphHandler(IBaseHandler *parent); virtual ~ParagraphHandler(); private: void addTextNode(); IBaseHandler *m_parent; QList m_children; MarkupHandler *m_markupHandler; }; //----------------------------------------------------------------------------- /*! \brief Node representing a documentation block. * */ class DocHandler : public BaseHandler { public: virtual void startDoc(const QXmlAttributes& attrib); virtual void endDoc(); virtual void startParagraph(const QXmlAttributes& attrib); DocHandler(IBaseHandler *parent); virtual ~DocHandler(); private: IBaseHandler *m_parent; QList m_children; }; #endif