XMLTreeWalker.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 XMLTREEWALKER_H_INCLUDED
11 #define XMLTREEWALKER_H_INCLUDED
12 
13 #include <iterator>
14 #include <string>
15 
16 #include <boost/intrusive_ptr.hpp>
17 
18 #include <librevenge-stream/librevenge-stream.h>
19 
20 #include "libebook_libcss.h"
21 #include "XMLStylesheet.h"
22 #include "XMLTreeNode.h"
23 
24 namespace libebook
25 {
26 
28 {
29 public:
30  class Attribute;
31  class AttributeIterator;
32  class Iterator;
33 
34  typedef int (*TokenizerFun_t)(const char *, std::size_t);
35 
36 public:
37  explicit XMLTreeWalker(const XMLTreeNodePtr_t &p, TokenizerFun_t tok = 0);
38 
39  bool empty() const;
40 
41  Iterator begin() const;
42  const Iterator end() const;
43 
44  bool hasParent() const;
45  const XMLTreeWalker getParent() const;
46 
47  bool isDocument() const;
48  bool isElement() const;
49  bool isText() const;
50 
51  int getId() const;
52 
53  const std::string getName() const;
54  const std::string getNamespace() const;
55 
56  const std::string &getText() const;
57 
58  bool hasAttributes() const;
59 
61  const AttributeIterator endAttributes() const;
62 
63  CSSSelectResultsPtr_t getStyle(const XMLStylesheets_t &sheets, bool quirks = false,
64  const CSSStylesheetPtr_t &inlineSheet = CSSStylesheetPtr_t()) const;
65 
66 private:
69 };
70 
72 {
73  // need access to ctor
74  friend class AttributeIterator;
75  friend class XMLTreeWalker;
76 
77 public:
78  int getId() const;
79  int getValueId() const;
80 
81  const std::string getName() const;
82  const std::string getNamespace() const;
83  const std::string getValue() const;
84 
85  bool operator==(const XMLTreeWalker::Attribute &rhs) const;
86 
87 private:
88  Attribute(const XMLTreeNodePtr_t &node, std::size_t index, TokenizerFun_t tok);
89 
90 private:
92  std::size_t m_index;
94 };
95 
97 
99 {
100  friend class XMLTreeWalker; // needs access to ctor
101 
102 public:
104  const AttributeIterator operator++(int);
105 
106  const Attribute &operator*() const;
107  const Attribute *operator->() const;
108 
110 
111 private:
112  explicit AttributeIterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok, bool end = false);
113 
114 private:
116  std::size_t m_index;
119 };
120 
122 
124 {
125  friend class XMLTreeWalker; // needs access to ctor
126 
127 public:
128  Iterator &operator++();
129  const Iterator operator++(int);
130 
131  const XMLTreeWalker &operator*() const;
132  const XMLTreeWalker *operator->() const;
133 
134  bool operator==(const XMLTreeWalker::Iterator &rhs) const;
135 
136 private:
137  Iterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok);
138 
139 private:
143 };
144 
146 
147 }
148 
149 namespace std
150 {
151 
152 // NOTE: I use specialization of std::iterator_traits because -Weffc++
153 // is too eager and does not let me derive from std::iterator .
154 
155 template<>
156 struct iterator_traits<libebook::XMLTreeWalker::AttributeIterator>
157 {
159  typedef std::ptrdiff_t difference_type;
160  typedef std::forward_iterator_tag iterator_category;
163 };
164 
165 template<>
166 struct iterator_traits<libebook::XMLTreeWalker::Iterator>
167 {
169  typedef std::ptrdiff_t difference_type;
170  typedef std::forward_iterator_tag iterator_category;
173 };
174 
175 }
176 
177 #endif // XMLTREEWALKER_H_INCLUDED
178 
179 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
boost::intrusive_ptr< XMLTreeNode > XMLTreeNodePtr_t
Definition: XMLTreeNode.h:24
AttributeIterator & operator++()
Definition: XMLTreeWalker.cpp:1423
Iterator & operator++()
Definition: XMLTreeWalker.cpp:1474
XMLTreeNodePtr_t m_impl
Definition: XMLTreeWalker.h:67
std::shared_ptr< css_select_results > CSSSelectResultsPtr_t
Definition: libebook_libcss.h:25
Definition: EBOOKHTMLToken.h:309
libebook::XMLTreeWalker & reference_type
Definition: XMLTreeWalker.h:172
bool isDocument() const
Definition: XMLTreeWalker.cpp:1262
Definition: XMLTreeWalker.h:98
XMLTreeWalker(const XMLTreeNodePtr_t &p, TokenizerFun_t tok=0)
Definition: XMLTreeWalker.cpp:1354
libebook::XMLTreeWalker * pointer_type
Definition: XMLTreeWalker.h:171
std::deque< XMLStylesheet > XMLStylesheets_t
Definition: XMLStylesheet.h:51
bool operator==(const XMLTreeWalker::Iterator &rhs) const
Definition: XMLTreeWalker.cpp:1506
std::size_t m_index
Definition: XMLTreeWalker.h:92
const std::string & getText() const
Definition: XMLTreeWalker.cpp:1322
std::ptrdiff_t difference_type
Definition: XMLTreeWalker.h:169
const XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:115
bool isElement() const
Definition: XMLTreeWalker.cpp:1269
Definition: XMLTreeWalker.h:149
Definition: EBOOKHTMLToken.h:290
const AttributeIterator endAttributes() const
Definition: XMLTreeWalker.cpp:1346
const std::string getName() const
Definition: XMLTreeWalker.cpp:1306
int getId() const
Definition: XMLTreeWalker.cpp:1283
const XMLTreeWalker getParent() const
Definition: XMLTreeWalker.cpp:1255
std::size_t m_index
Definition: XMLTreeWalker.h:116
std::shared_ptr< css_stylesheet > CSSStylesheetPtr_t
Definition: libebook_libcss.h:23
Definition: XMLTreeWalker.h:71
XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:91
int getValueId() const
Definition: XMLTreeWalker.cpp:1382
XMLTreeWalker m_current
Definition: XMLTreeWalker.h:141
std::forward_iterator_tag iterator_category
Definition: XMLTreeWalker.h:160
Iterator begin() const
Definition: XMLTreeWalker.cpp:1232
libebook::XMLTreeWalker value_type
Definition: XMLTreeWalker.h:168
bool operator!=(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition: XMLTreeNode.cpp:445
Iterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok)
Definition: XMLTreeWalker.cpp:1511
CSSSelectResultsPtr_t getStyle(const XMLStylesheets_t &sheets, bool quirks=false, const CSSStylesheetPtr_t &inlineSheet=CSSStylesheetPtr_t()) const
Definition: XMLTreeWalker.cpp:1524
const std::string getValue() const
Definition: XMLTreeWalker.cpp:1401
const XMLTreeWalker & operator*() const
Definition: XMLTreeWalker.cpp:1492
libebook::XMLTreeWalker::Attribute * pointer_type
Definition: XMLTreeWalker.h:161
std::forward_iterator_tag iterator_category
Definition: XMLTreeWalker.h:170
const std::string getNamespace() const
Definition: XMLTreeWalker.cpp:1314
Attribute m_current
Definition: XMLTreeWalker.h:117
int getId() const
Definition: XMLTreeWalker.cpp:1360
XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:140
Definition: EBOOKHTMLToken.h:116
const Attribute * operator->() const
Definition: XMLTreeWalker.cpp:1448
Attribute(const XMLTreeNodePtr_t &node, std::size_t index, TokenizerFun_t tok)
Definition: XMLTreeWalker.cpp:1411
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:118
std::ptrdiff_t difference_type
Definition: XMLTreeWalker.h:159
const Attribute & operator*() const
Definition: XMLTreeWalker.cpp:1441
libebook::XMLTreeWalker::Attribute value_type
Definition: XMLTreeWalker.h:158
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:68
Definition: XMLTreeWalker.h:123
bool isText() const
Definition: XMLTreeWalker.cpp:1276
const std::string getNamespace() const
Definition: XMLTreeWalker.cpp:1396
Definition: BBeBCollector.cpp:18
const std::string getName() const
Definition: XMLTreeWalker.cpp:1391
bool hasAttributes() const
Definition: XMLTreeWalker.cpp:1330
AttributeIterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok, bool end=false)
Definition: XMLTreeWalker.cpp:1460
libebook::XMLTreeWalker::Attribute & reference_type
Definition: XMLTreeWalker.h:162
bool operator==(const XMLTreeWalker::Attribute &rhs) const
Definition: XMLTreeWalker.cpp:1406
bool operator==(const XMLTreeWalker::AttributeIterator &rhs) const
Definition: XMLTreeWalker.cpp:1455
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:142
bool empty() const
Definition: XMLTreeWalker.cpp:1224
const XMLTreeWalker * operator->() const
Definition: XMLTreeWalker.cpp:1499
bool hasParent() const
Definition: XMLTreeWalker.cpp:1248
int(* TokenizerFun_t)(const char *, std::size_t)
Definition: XMLTreeWalker.h:34
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:93
const Iterator end() const
Definition: XMLTreeWalker.cpp:1240
Definition: XMLTreeWalker.h:27
AttributeIterator beginAttributes() const
Definition: XMLTreeWalker.cpp:1338

Generated for libe-book by doxygen 1.8.14