FB2ParserContext.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /*
00003  * This file is part of the libe-book project.
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 
00010 #ifndef FB2PARSERCONTEXT_H_INCLUDED
00011 #define FB2PARSERCONTEXT_H_INCLUDED
00012 
00013 #include "FB2XMLParserContext.h"
00014 #include "FB2Style.h"
00015 
00016 namespace libebook
00017 {
00018 
00019 class FB2Collector;
00020 
00023 class FB2ParserContext : public FB2XMLParserContext
00024 {
00025   // no copying
00026   FB2ParserContext(const FB2ParserContext &other);
00027   FB2ParserContext &operator=(const FB2ParserContext &other);
00028 
00029 public:
00035   explicit FB2ParserContext(FB2ParserContext *parentContext, FB2Collector *collector = 0);
00036 
00037   virtual FB2XMLParserContext *leaveContext() const;
00038 
00043   FB2Collector *getCollector() const;
00044 
00049   FB2ParserContext *getParentContext() const;
00050 
00051 private:
00052   FB2Collector *const m_collector;
00053   FB2ParserContext *const m_parentContext;
00054 };
00055 
00061 class FB2NodeContextBase : public FB2ParserContext
00062 {
00063 public:
00064   explicit FB2NodeContextBase(FB2ParserContext *parentContext, FB2Collector *collector = 0);
00065 
00066 private:
00067   virtual void startOfElement();
00068   virtual void endOfAttributes();
00069   virtual void text(const char *value);
00070 };
00071 
00081 class FB2DataContextBase : public FB2ParserContext
00082 {
00083 public:
00084   explicit FB2DataContextBase(FB2ParserContext *parentContext);
00085 
00086 private:
00087   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00088   virtual void startOfElement();
00089   virtual void endOfAttributes();
00090   virtual void text(const char *value);
00091 };
00092 
00098 class FB2TextContextBase : public FB2ParserContext
00099 {
00100 public:
00101   explicit FB2TextContextBase(FB2ParserContext *parentContext);
00102 
00103 private:
00104   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00105   virtual void startOfElement();
00106   virtual void endOfElement();
00107   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00108   virtual void endOfAttributes();
00109 };
00110 
00113 class FB2SkipElementContext : public FB2ParserContext
00114 {
00115 public:
00116   explicit FB2SkipElementContext(FB2ParserContext *parentContext);
00117 
00118 private:
00119   virtual FB2XMLParserContext *leaveContext() const;
00120 
00121   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00122   virtual void startOfElement();
00123   virtual void endOfElement();
00124   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00125   virtual void endOfAttributes();
00126   virtual void text(const char *value);
00127 
00128 private:
00129   unsigned m_level;
00130 };
00131 
00132 class FB2StyleContextBase : public FB2ParserContext
00133 {
00134 public:
00135   FB2StyleContextBase(FB2ParserContext *parentContext, const FB2Style &style);
00136 
00137 protected:
00138   FB2Style &getStyle();
00139   FB2TextFormat &getTextFormat();
00140 
00141   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00142   virtual void endOfElement();
00143   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00144   virtual void endOfAttributes();
00145   virtual void text(const char *value);
00146 
00147 private:
00148   FB2Style m_style;
00149 };
00150 
00151 class FB2BlockFormatContextBase : public FB2NodeContextBase
00152 {
00153 public:
00154   FB2BlockFormatContextBase(FB2ParserContext *parentContext, const FB2BlockFormat &format);
00155 
00156   FB2BlockFormat &getBlockFormat();
00157   const FB2BlockFormat &getBlockFormat() const;
00158 
00159   void setLang(const char *lang);
00160 
00161 private:
00162   FB2BlockFormat m_format;
00163 };
00164 
00165 }
00166 
00167 #endif // FB2PARSERCONTEXT_H_INCLUDED
00168 
00169 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */