📄 dochandler.h
字号:
/****************************************************************************** * * $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 <qstring.h>#include <qlist.h>#include <qxml.h>#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, Parameter, SimpleSect, Title, Ref, VariableList, VariableListEntry, HRuler, LineBreak, ULink, EMail, Link, ProgramListing, CodeLine, Highlight, Anchor, Formula, Image, DotFile, IndexEntry, Table, Row, Entry }; 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<MarkupHandler>{ public: MarkupHandler(QList<DocNode> &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<DocNode> &m_children; QString &m_curString; int m_curMarkup;};//-----------------------------------------------------------------------------/*! \brief Node representing a list item. * */class ListItemHandler : public DocNode, public BaseHandler<ListItemHandler>{ 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<DocNode> m_children;};//-----------------------------------------------------------------------------/*! \brief Node representing list of items. * */class ListHandler : public DocNode, public BaseHandler<ListHandler>{ 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<DocNode> m_children;};//-----------------------------------------------------------------------------/*! \brief Node representing a parameter. * */class ParameterHandler : public DocNode, public BaseHandler<ParameterHandler>{ public: ParameterHandler(IBaseHandler *parent); virtual ~ParameterHandler(); virtual void startParameterName(const QXmlAttributes& attrib); virtual void endParameterName(); virtual void startParameterDescription(const QXmlAttributes& attrib); virtual void endParameterDescription(); virtual void startParagraph(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; QString m_name; ParagraphHandler *m_description;};//-----------------------------------------------------------------------------/* \brief Node representing a parameter list. * */class ParameterListHandler : public DocNode, public BaseHandler<ParameterListHandler>{ public: enum Types { Param, RetVal, Exception }; ParameterListHandler(IBaseHandler *parent); virtual ~ParameterListHandler(); virtual void startParameterList(const QXmlAttributes& attrib); virtual void endParameterList(); virtual void startParameterName(const QXmlAttributes& attrib); virtual void startParameterDescription(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; QList<ParameterHandler> m_parameters; ParameterHandler *m_curParam; Types m_type;};//-----------------------------------------------------------------------------/* \brief Node representing a horizontal ruler * */class LineBreakHandler : public DocNode, public BaseHandler<LineBreakHandler>{ public: LineBreakHandler(IBaseHandler *parent); virtual ~LineBreakHandler(); void startLineBreak(const QXmlAttributes& attrib); void endLineBreak(); private: IBaseHandler *m_parent;};//-----------------------------------------------------------------------------/* \brief Node representing a link to section * */class LinkHandler : public DocNode, public BaseHandler<LinkHandler>{ public: LinkHandler(IBaseHandler *parent); virtual ~LinkHandler(); void startLink(const QXmlAttributes& attrib); void endLink(); private: IBaseHandler *m_parent; QString m_ref; QString m_text;};//-----------------------------------------------------------------------------/* \brief Node representing a link to an email address * */class EMailHandler : public DocNode, public BaseHandler<EMailHandler>{ public: EMailHandler(IBaseHandler *parent); virtual ~EMailHandler(); void startEMail(const QXmlAttributes& attrib); void endEMail(); private: IBaseHandler *m_parent; QString m_address;};//-----------------------------------------------------------------------------/* \brief Node representing a link to an URL * */class ULinkHandler : public DocNode, public BaseHandler<ULinkHandler>{ public: ULinkHandler(IBaseHandler *parent); virtual ~ULinkHandler(); void startULink(const QXmlAttributes& attrib); void endULink(); private: IBaseHandler *m_parent; QString m_url; QString m_text;};//-----------------------------------------------------------------------------/* \brief Node representing a horizontal ruler * */class HRulerHandler : public DocNode, public BaseHandler<HRulerHandler>{ public: HRulerHandler(IBaseHandler *parent); virtual ~HRulerHandler(); void startHRuler(const QXmlAttributes& attrib); void endHRuler(); private: IBaseHandler *m_parent;};//-----------------------------------------------------------------------------/* \brief Node representing a reference to another item * */class RefHandler : public DocNode, public BaseHandler<RefHandler>{ public: RefHandler(IBaseHandler *parent); virtual ~RefHandler(); void startRef(const QXmlAttributes& attrib); void endRef(); private: IBaseHandler *m_parent; QString m_refId; QString m_anchor; QString m_linkText;};//-----------------------------------------------------------------------------/* \brief Node representing the title of a section * */// children: text, ref// children handled by MarkupHandler: // bold, computeroutput, emphasis, center,// small, subscript, superscript. class TitleHandler : public DocNode, public BaseHandler<TitleHandler>{ public: TitleHandler(IBaseHandler *parent); virtual ~TitleHandler(); virtual void startTitle(const QXmlAttributes& attrib); virtual void endTitle();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -