FB2BlockContext.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 FB2BLOCKCONTEXT_H_INCLUDED
00011 #define FB2BLOCKCONTEXT_H_INCLUDED
00012 
00013 #include <string>
00014 
00015 #include <boost/optional.hpp>
00016 
00017 #include "FB2ParserContext.h"
00018 
00019 namespace libebook
00020 {
00021 
00022 class FB2BodyContext : public FB2NodeContextBase
00023 {
00024 public:
00025   FB2BodyContext(FB2ParserContext *parentContext, FB2Collector *collector, bool collectHeadings);
00026 
00027 private:
00028   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00029   virtual void startOfElement();
00030   virtual void endOfElement();
00031   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00032 
00033 private:
00034   const bool m_collectHeadings;
00035   boost::optional<std::string> m_lang;
00036 };
00037 
00038 class FB2CiteContext : public FB2BlockFormatContextBase
00039 {
00040 public:
00041   FB2CiteContext(FB2ParserContext *parentContext, const FB2BlockFormat &format);
00042 
00043 private:
00044   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00045   virtual void endOfElement();
00046   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00047 };
00048 
00049 class FB2EmptyLineContext : public FB2DataContextBase
00050 {
00051 public:
00052   explicit FB2EmptyLineContext(FB2ParserContext *parentContext);
00053 
00054 private:
00055   virtual void endOfElement();
00056   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00057 };
00058 
00059 class FB2EpigraphContext : public FB2BlockFormatContextBase
00060 {
00061 public:
00062   FB2EpigraphContext(FB2ParserContext *parentContext, const FB2BlockFormat &format);
00063 
00064 private:
00065   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00066   virtual void endOfElement();
00067   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00068 };
00069 
00070 class FB2ImageContext : public FB2NodeContextBase
00071 {
00072 public:
00073   FB2ImageContext(FB2ParserContext *parentContext);
00074 
00075 private:
00076   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00077   virtual void endOfElement();
00078   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00079 
00080 private:
00081   std::string m_href;
00082   std::string m_altText;
00083   bool m_valid;
00084 };
00085 
00086 class FB2PoemContext : public FB2BlockFormatContextBase
00087 {
00088 public:
00089   FB2PoemContext(FB2ParserContext *parentContext, const FB2BlockFormat &format);
00090 
00091 private:
00092   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00093   virtual void startOfElement();
00094   virtual void endOfElement();
00095   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00096 };
00097 
00098 class FB2SectionContext : public FB2NodeContextBase
00099 {
00100 public:
00101   FB2SectionContext(FB2ParserContext *parentContext, const boost::optional<std::string> &lang);
00102   FB2SectionContext(FB2ParserContext *parentContext, uint8_t level, const boost::optional<std::string> &lang);
00103 
00104 private:
00105   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00106   virtual void endOfElement();
00107   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00108 
00109   FB2BlockFormat makeBlockFormat() const;
00110 
00111 private:
00112   // The level of the section. A section directly in body is at level 1.
00113   boost::optional<uint8_t> m_level;
00114   boost::optional<std::string> m_lang;
00115 };
00116 
00117 class FB2StanzaContext : public FB2BlockFormatContextBase
00118 {
00119 public:
00120   FB2StanzaContext(FB2ParserContext *parentContext, const FB2BlockFormat &format);
00121 
00122 private:
00123   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00124   virtual void endOfElement();
00125   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00126 };
00127 
00128 class FB2TitleContext : public FB2BlockFormatContextBase
00129 {
00130 public:
00131   FB2TitleContext(FB2ParserContext *const parentContext, const FB2BlockFormat &format);
00132 
00133 private:
00134   virtual FB2XMLParserContext *element(const FB2TokenData &name, const FB2TokenData &ns);
00135   virtual void endOfElement();
00136   virtual void attribute(const FB2TokenData &name, const FB2TokenData *ns, const char *value);
00137 };
00138 
00139 }
00140 
00141 #endif // FB2BLOCKCONTEXT_H_INCLUDED
00142 
00143 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */