FB2ParserContext.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* libe-book
00003  * Version: MPL 2.0 / LGPLv2.1+
00004  *
00005  * This Source Code Form is subject to the terms of the Mozilla Public
00006  * License, v. 2.0. If a copy of the MPL was not distributed with this
00007  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
00008  *
00009  * Alternatively, the contents of this file may be used under the terms
00010  * of the GNU Lesser General Public License Version 2.1 or later
00011  * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
00012  * applicable instead of those above.
00013  *
00014  * For further information visit http://libebook.sourceforge.net
00015  */
00016 
00017 #ifndef FB2PARSERCONTEXT_H_INCLUDED
00018 #define FB2PARSERCONTEXT_H_INCLUDED
00019 
00020 #include "FB2XMLParserContext.h"
00021 #include "FB2Style.h"
00022 
00023 namespace libebook
00024 {
00025 
00026 class FB2Collector;
00027 
00030 class FB2ParserContext : public FB2XMLParserContext
00031 {
00032   // no copying
00033   FB2ParserContext(const FB2ParserContext &other);
00034   FB2ParserContext &operator=(const FB2ParserContext &other);
00035 
00036 public:
00042   explicit FB2ParserContext(FB2ParserContext *parentContext, FB2Collector *collector = 0);
00043 
00044   virtual FB2XMLParserContext *leaveContext() const;
00045 
00050   FB2Collector *getCollector() const;
00051 
00056   FB2ParserContext *getParentContext() const;
00057 
00058 private:
00059   FB2Collector *const m_collector;
00060   FB2ParserContext *const m_parentContext;
00061 };
00062 
00068 class FB2NodeContextBase : public FB2ParserContext
00069 {
00070 public:
00071   explicit FB2NodeContextBase(FB2ParserContext *parentContext, FB2Collector *collector = 0);
00072 
00073 private:
00074   virtual void startOfElement();
00075   virtual void endOfAttributes();
00076   virtual void text(const char *value);
00077 };
00078 
00088 class FB2DataContextBase : public FB2ParserContext
00089 {
00090 public:
00091   explicit FB2DataContextBase(FB2ParserContext *parentContext);
00092 
00093 private:
00094   virtual FB2XMLParserContext *element(const EBOOKToken &name, const EBOOKToken &ns);
00095   virtual void startOfElement();
00096   virtual void endOfAttributes();
00097   virtual void text(const char *value);
00098 };
00099 
00105 class FB2TextContextBase : public FB2ParserContext
00106 {
00107 public:
00108   explicit FB2TextContextBase(FB2ParserContext *parentContext);
00109 
00110 private:
00111   virtual FB2XMLParserContext *element(const EBOOKToken &name, const EBOOKToken &ns);
00112   virtual void startOfElement();
00113   virtual void endOfElement();
00114   virtual void attribute(const EBOOKToken &name, const EBOOKToken *ns, const char *value);
00115   virtual void endOfAttributes();
00116 };
00117 
00120 class FB2SkipElementContext : public FB2ParserContext
00121 {
00122 public:
00123   explicit FB2SkipElementContext(FB2ParserContext *parentContext);
00124 
00125 private:
00126   virtual FB2XMLParserContext *leaveContext() const;
00127 
00128   virtual FB2XMLParserContext *element(const EBOOKToken &name, const EBOOKToken &ns);
00129   virtual void startOfElement();
00130   virtual void endOfElement();
00131   virtual void attribute(const EBOOKToken &name, const EBOOKToken *ns, const char *value);
00132   virtual void endOfAttributes();
00133   virtual void text(const char *value);
00134 
00135 private:
00136   unsigned m_level;
00137 };
00138 
00139 class FB2StyleContextBase : public FB2ParserContext
00140 {
00141 public:
00142   FB2StyleContextBase(FB2ParserContext *parentContext, const FB2Style &style);
00143 
00144 protected:
00145   FB2Style &getStyle();
00146   FB2TextFormat &getTextFormat();
00147 
00148 private:
00149   virtual FB2XMLParserContext *element(const EBOOKToken &name, const EBOOKToken &ns);
00150   virtual void endOfElement();
00151   virtual void attribute(const EBOOKToken &name, const EBOOKToken *ns, const char *value);
00152   virtual void endOfAttributes();
00153   virtual void text(const char *value);
00154 
00155 private:
00156   FB2Style m_style;
00157 };
00158 
00159 class FB2BlockFormatContextBase : public FB2NodeContextBase
00160 {
00161 public:
00162   FB2BlockFormatContextBase(FB2ParserContext *parentContext, const FB2BlockFormat &format);
00163 
00164   FB2BlockFormat &getBlockFormat();
00165   const FB2BlockFormat &getBlockFormat() const;
00166 
00167 private:
00168   FB2BlockFormat m_format;
00169 };
00170 
00171 }
00172 
00173 #endif // FB2PARSERCONTEXT_H_INCLUDED
00174 
00175 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */