BBeBParser.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libe-book project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef BBEBPARSER_H_INCLUDED
11 #define BBEBPARSER_H_INCLUDED
12 
13 #include <vector>
14 #include <map>
15 #include <memory>
16 
17 #include "BBeBCollector.h"
18 
19 
20 namespace libebook
21 {
22 
23 struct BBeBHeader;
24 
26 {
27  // disable copying
28  BBeBParser(const BBeBParser &other);
30 
32  {
59  OBJECT_TYPE_TOC = 0x1e
60  };
61 
63  {
64  unsigned offset;
65  unsigned size;
66  bool reading;
67  bool read;
68  };
69 
70  typedef std::map<unsigned, BBeBIndexEntry> ObjectIndex_t;
71  typedef std::vector<unsigned> ToC_t;
72 
73 public:
74  BBeBParser(librevenge::RVNGInputStream *input, librevenge::RVNGTextInterface *document);
75  ~BBeBParser();
76 
77  bool parse();
78 
79  static bool isSupported(librevenge::RVNGInputStream *input);
80 
81 private:
82  void readHeader();
83  void readMetadata();
84  void readThumbnail();
85  void readObjectIndex();
86 
87  void readObject(unsigned id, unsigned type = OBJECT_TYPE_UNSPECIFIED);
88 
89  void readPageTreeObject(librevenge::RVNGInputStream *object);
90  void readPageObject(librevenge::RVNGInputStream *object);
91  void readFooterObject(librevenge::RVNGInputStream *object);
92  void readHeaderObject(librevenge::RVNGInputStream *object);
93  void readPageAtrObject(librevenge::RVNGInputStream *object, unsigned id);
94  void readBlockObject(librevenge::RVNGInputStream *object, unsigned id);
95  void readBlockAtrObject(librevenge::RVNGInputStream *object, unsigned id);
96  void readMiniPageObject(librevenge::RVNGInputStream *object);
97  void readBlockListObject(librevenge::RVNGInputStream *object);
98  void readTextObject(librevenge::RVNGInputStream *object);
99  void readTextAtrObject(librevenge::RVNGInputStream *object, unsigned id);
100  void readImageObject(librevenge::RVNGInputStream *object, unsigned id);
101  void readCanvasObject(librevenge::RVNGInputStream *object);
102  void readParagraphAtrObject(librevenge::RVNGInputStream *object, unsigned id);
103  void readImageStreamObject(librevenge::RVNGInputStream *object, unsigned id);
104  void readImportObject(librevenge::RVNGInputStream *object);
105  void readButtonObject(librevenge::RVNGInputStream *object);
106  void readWindowObject(librevenge::RVNGInputStream *object);
107  void readPopUpWinObject(librevenge::RVNGInputStream *object);
108  void readSoundObject(librevenge::RVNGInputStream *object);
109  void readPlaneStreamObject(librevenge::RVNGInputStream *object);
110  void readFontObject(librevenge::RVNGInputStream *object);
111  void readObjectInfoObject(librevenge::RVNGInputStream *object);
112  void readBookAtrObject(librevenge::RVNGInputStream *object);
113  void readSimpleTextObject(librevenge::RVNGInputStream *object);
114  void readTOCObject(librevenge::RVNGInputStream *object);
115 
116  void readToCStream(librevenge::RVNGInputStream *input);
117 
118  bool readAttribute(unsigned tag, librevenge::RVNGInputStream *input, BBeBAttributes &attributes);
119 
120  void skipUnhandledTag(unsigned tag, librevenge::RVNGInputStream *input, const char *objectType);
121 
122  bool isObjectRead(unsigned id) const;
123 
124  double toInches(unsigned px) const;
125 
126 private:
128  librevenge::RVNGInputStream *m_input;
129  std::unique_ptr<BBeBHeader> m_header;
131  unsigned m_pageTree;
133 };
134 
135 } // namespace libebook
136 
137 #endif // BBEBPARSER_H_INCLUDED
138 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
EBOOKDocument::Type type
Definition: EBOOKDocument.cpp:325
XMLTreeNodePtr_t document
Definition: EBOOKHTMLParser.cpp:163
qi::rule< Iterator, std::pair< int, Attributes_t >, qi::space_type > tag
Definition: TealDocParser.cpp:229
Definition: BBeBCollector.h:23
Definition: BBeBParser.h:26
void readSimpleTextObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1119
void readMiniPageObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:749
void readImportObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1034
void readObjectInfoObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1083
unsigned m_pageTree
Definition: BBeBParser.h:131
void skipUnhandledTag(unsigned tag, librevenge::RVNGInputStream *input, const char *objectType)
Definition: BBeBParser.cpp:1392
void readToCStream(librevenge::RVNGInputStream *input)
Definition: BBeBParser.cpp:1175
ObjectType
Definition: BBeBParser.h:32
@ OBJECT_TYPE_PAGE_ATR
Definition: BBeBParser.h:38
@ OBJECT_TYPE_MINI_PAGE
Definition: BBeBParser.h:41
@ OBJECT_TYPE_SOUND
Definition: BBeBParser.h:53
@ OBJECT_TYPE_PAGE_TREE
Definition: BBeBParser.h:34
@ OBJECT_TYPE_CANVAS
Definition: BBeBParser.h:46
@ OBJECT_TYPE_SSoftBookLE_TEXT
Definition: BBeBParser.h:58
@ OBJECT_TYPE_OBJECT_INFO
Definition: BBeBParser.h:56
@ OBJECT_TYPE_TEXT_ATR
Definition: BBeBParser.h:44
@ OBJECT_TYPE_PARAGRAPH_ATR
Definition: BBeBParser.h:47
@ OBJECT_TYPE_IMAGE_STREAM
Definition: BBeBParser.h:48
@ OBJECT_TYPE_BUTTON
Definition: BBeBParser.h:50
@ OBJECT_TYPE_IMAGE
Definition: BBeBParser.h:45
@ OBJECT_TYPE_WINDOW
Definition: BBeBParser.h:51
@ OBJECT_TYPE_FONT
Definition: BBeBParser.h:55
@ OBJECT_TYPE_SoftBookORT
Definition: BBeBParser.h:49
@ OBJECT_TYPE_TOC
Definition: BBeBParser.h:59
@ OBJECT_TYPE_TEXT
Definition: BBeBParser.h:43
@ OBJECT_TYPE_BLOCK_ATR
Definition: BBeBParser.h:40
@ OBJECT_TYPE_PLANE_STREAM
Definition: BBeBParser.h:54
@ OBJECT_TYPE_POP_UP_WIN
Definition: BBeBParser.h:52
@ OBJECT_TYPE_FOOTER
Definition: BBeBParser.h:37
@ OBJECT_TYPE_HEADER
Definition: BBeBParser.h:36
@ OBJECT_TYPE_BLOCK
Definition: BBeBParser.h:39
@ OBJECT_TYPE_BLOCK_LIST
Definition: BBeBParser.h:42
@ OBJECT_TYPE_UNSPECIFIED
Definition: BBeBParser.h:33
@ OBJECT_TYPE_PAGE
Definition: BBeBParser.h:35
@ OBJECT_TYPE_BOOK_ATR
Definition: BBeBParser.h:57
void readCanvasObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:955
void readWindowObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1048
void readBlockObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:659
librevenge::RVNGInputStream * m_input
Definition: BBeBParser.h:128
bool parse()
Definition: BBeBParser.cpp:282
void readBlockAtrObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:735
std::vector< unsigned > ToC_t
Definition: BBeBParser.h:71
void readButtonObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1041
void readObject(unsigned id, unsigned type=OBJECT_TYPE_UNSPECIFIED)
Definition: BBeBParser.cpp:382
void readPageObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:553
void readParagraphAtrObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:962
BBeBParser & operator=(const BBeBParser &other)
void readHeader()
Definition: BBeBParser.cpp:307
void readTextObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:763
void readPlaneStreamObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1069
void readTextAtrObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:906
ObjectIndex_t m_objectIndex
Definition: BBeBParser.h:130
double toInches(unsigned px) const
void readImageStreamObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:976
~BBeBParser()
Definition: BBeBParser.cpp:278
void readThumbnail()
Definition: BBeBParser.cpp:361
BBeBCollector m_collector
Definition: BBeBParser.h:127
bool readAttribute(unsigned tag, librevenge::RVNGInputStream *input, BBeBAttributes &attributes)
Definition: BBeBParser.cpp:1205
void readFontObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1076
ToC_t m_toc
Definition: BBeBParser.h:132
void readBookAtrObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1090
bool isObjectRead(unsigned id) const
Definition: BBeBParser.cpp:1613
void readImageObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:920
void readTOCObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1126
void readPopUpWinObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1055
void readFooterObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:631
void readBlockListObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:756
BBeBParser(const BBeBParser &other)
void readSoundObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:1062
std::unique_ptr< BBeBHeader > m_header
Definition: BBeBParser.h:129
void readMetadata()
Definition: BBeBParser.cpp:348
void readHeaderObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:638
void readObjectIndex()
Definition: BBeBParser.cpp:366
static bool isSupported(librevenge::RVNGInputStream *input)
Definition: BBeBParser.cpp:299
void readPageAtrObject(librevenge::RVNGInputStream *object, unsigned id)
Definition: BBeBParser.cpp:645
std::map< unsigned, BBeBIndexEntry > ObjectIndex_t
Definition: BBeBParser.h:70
void readPageTreeObject(librevenge::RVNGInputStream *object)
Definition: BBeBParser.cpp:533
@ input
Definition: EBOOKHTMLToken.h:89
Definition: BBeBCollector.cpp:19
Definition: BBeBTypes.h:109
Definition: BBeBParser.h:63
bool read
Definition: BBeBParser.h:67
bool reading
Definition: BBeBParser.h:66
unsigned size
Definition: BBeBParser.h:65
unsigned offset
Definition: BBeBParser.h:64

Generated for libe-book by doxygen 1.9.0