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 
149 
150 }
151 
152 namespace std
153 {
154 
155 // NOTE: I use specialization of std::iterator_traits because -Weffc++
156 // is too eager and does not let me derive from std::iterator .
157 
158 template<>
159 struct iterator_traits<libebook::XMLTreeWalker::AttributeIterator>
160 {
162  typedef std::ptrdiff_t difference_type;
163  typedef std::forward_iterator_tag iterator_category;
166 };
167 
168 template<>
169 struct iterator_traits<libebook::XMLTreeWalker::Iterator>
170 {
172  typedef std::ptrdiff_t difference_type;
173  typedef std::forward_iterator_tag iterator_category;
176 };
177 
178 }
179 
180 #endif // XMLTREEWALKER_H_INCLUDED
181 
182 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
boost::intrusive_ptr< XMLTreeNode > XMLTreeNodePtr_t
Definition: XMLTreeNode.h:24
bool operator==(const XMLTreeWalker::Iterator &rhs) const
Definition: XMLTreeWalker.cpp:1507
AttributeIterator & operator++()
Definition: XMLTreeWalker.cpp:1424
Iterator & operator++()
Definition: XMLTreeWalker.cpp:1475
XMLTreeNodePtr_t m_impl
Definition: XMLTreeWalker.h:67
Definition: EBOOKHTMLToken.h:311
libebook::XMLTreeWalker & reference_type
Definition: XMLTreeWalker.h:175
Definition: XMLTreeWalker.h:98
const std::string getName() const
Definition: XMLTreeWalker.cpp:1392
const XMLTreeWalker getParent() const
Definition: XMLTreeWalker.cpp:1256
XMLTreeWalker(const XMLTreeNodePtr_t &p, TokenizerFun_t tok=0)
Definition: XMLTreeWalker.cpp:1355
int getId() const
Definition: XMLTreeWalker.cpp:1284
libebook::XMLTreeWalker * pointer_type
Definition: XMLTreeWalker.h:174
const Attribute * operator->() const
Definition: XMLTreeWalker.cpp:1449
std::deque< XMLStylesheet > XMLStylesheets_t
Definition: XMLStylesheet.h:51
Iterator begin() const
Definition: XMLTreeWalker.cpp:1233
const AttributeIterator endAttributes() const
Definition: XMLTreeWalker.cpp:1347
std::size_t m_index
Definition: XMLTreeWalker.h:92
int getValueId() const
Definition: XMLTreeWalker.cpp:1383
bool operator==(const XMLTreeWalker::Attribute &rhs) const
Definition: XMLTreeWalker.cpp:1407
std::ptrdiff_t difference_type
Definition: XMLTreeWalker.h:172
int getId() const
Definition: XMLTreeWalker.cpp:1361
CSSSelectResultsPtr_t getStyle(const XMLStylesheets_t &sheets, bool quirks=false, const CSSStylesheetPtr_t &inlineSheet=CSSStylesheetPtr_t()) const
Definition: XMLTreeWalker.cpp:1525
const std::string getNamespace() const
Definition: XMLTreeWalker.cpp:1397
const XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:115
Definition: XMLTreeWalker.h:152
boost::shared_ptr< css_select_results > CSSSelectResultsPtr_t
Definition: libebook_libcss.h:24
Definition: EBOOKHTMLToken.h:292
std::size_t m_index
Definition: XMLTreeWalker.h:116
bool empty() const
Definition: XMLTreeWalker.cpp:1225
bool isDocument() const
Definition: XMLTreeWalker.cpp:1263
Definition: XMLTreeWalker.h:71
XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:91
XMLTreeWalker m_current
Definition: XMLTreeWalker.h:141
std::forward_iterator_tag iterator_category
Definition: XMLTreeWalker.h:163
const Iterator end() const
Definition: XMLTreeWalker.cpp:1241
libebook::XMLTreeWalker value_type
Definition: XMLTreeWalker.h:171
bool operator!=(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition: XMLTreeNode.cpp:446
Iterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok)
Definition: XMLTreeWalker.cpp:1512
void intrusive_ptr_release(XMLTreeNode *const p)
Definition: XMLTreeNode.cpp:489
Definition: XMLTreeNode.h:27
bool hasParent() const
Definition: XMLTreeWalker.cpp:1249
const XMLTreeWalker * operator->() const
Definition: XMLTreeWalker.cpp:1500
libebook::XMLTreeWalker::Attribute * pointer_type
Definition: XMLTreeWalker.h:164
bool operator==(const XMLTreeWalker::AttributeIterator &rhs) const
Definition: XMLTreeWalker.cpp:1456
const std::string getValue() const
Definition: XMLTreeWalker.cpp:1402
boost::shared_ptr< css_stylesheet > CSSStylesheetPtr_t
Definition: libebook_libcss.h:22
bool hasAttributes() const
Definition: XMLTreeWalker.cpp:1331
std::forward_iterator_tag iterator_category
Definition: XMLTreeWalker.h:173
bool isElement() const
Definition: XMLTreeWalker.cpp:1270
Attribute m_current
Definition: XMLTreeWalker.h:117
XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:140
const std::string getNamespace() const
Definition: XMLTreeWalker.cpp:1315
Definition: EBOOKHTMLToken.h:118
Attribute(const XMLTreeNodePtr_t &node, std::size_t index, TokenizerFun_t tok)
Definition: XMLTreeWalker.cpp:1412
const std::string & getText() const
Definition: XMLTreeWalker.cpp:1323
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:118
std::ptrdiff_t difference_type
Definition: XMLTreeWalker.h:162
libebook::XMLTreeWalker::Attribute value_type
Definition: XMLTreeWalker.h:161
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:68
Definition: XMLTreeWalker.h:123
Definition: CHMParser.cpp:20
bool isText() const
Definition: XMLTreeWalker.cpp:1277
AttributeIterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok, bool end=false)
Definition: XMLTreeWalker.cpp:1461
libebook::XMLTreeWalker::Attribute & reference_type
Definition: XMLTreeWalker.h:165
void intrusive_ptr_add_ref(XMLTreeNode *const p)
Definition: XMLTreeNode.cpp:484
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:142
int(* TokenizerFun_t)(const char *, std::size_t)
Definition: XMLTreeWalker.h:34
const XMLTreeWalker & operator*() const
Definition: XMLTreeWalker.cpp:1493
const std::string getName() const
Definition: XMLTreeWalker.cpp:1307
AttributeIterator beginAttributes() const
Definition: XMLTreeWalker.cpp:1339
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:93
const Attribute & operator*() const
Definition: XMLTreeWalker.cpp:1442
Definition: XMLTreeWalker.h:27

Generated for libe-book by doxygen 1.8.8