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
24namespace libebook
25{
26
28{
29public:
30 class Attribute;
32 class Iterator;
33
34 typedef int (*TokenizerFun_t)(const char *, std::size_t);
35
36public:
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
66private:
69};
70
72{
73 // need access to ctor
74 friend class AttributeIterator;
75 friend class XMLTreeWalker;
76
77public:
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
87private:
88 Attribute(const XMLTreeNodePtr_t &node, std::size_t index, TokenizerFun_t tok);
89
90private:
92 std::size_t m_index;
94};
95
97
99{
100 friend class XMLTreeWalker; // needs access to ctor
101
102public:
104 const AttributeIterator operator++(int);
105
106 const Attribute &operator*() const;
107 const Attribute *operator->() const;
108
110
111private:
112 explicit AttributeIterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok, bool end = false);
113
114private:
116 std::size_t m_index;
119};
120
122
124{
125 friend class XMLTreeWalker; // needs access to ctor
126
127public:
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
136private:
137 Iterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok);
138
139private:
143};
144
146
147}
148
149namespace 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
155template<>
156struct iterator_traits<libebook::XMLTreeWalker::AttributeIterator>
157{
159 typedef std::ptrdiff_t difference_type;
160 typedef std::forward_iterator_tag iterator_category;
163};
164
165template<>
166struct 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: */
Definition: XMLTreeWalker.h:99
const Attribute & operator*() const
Definition: XMLTreeWalker.cpp:1441
const XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:115
const Attribute * operator->() const
Definition: XMLTreeWalker.cpp:1448
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:118
Attribute m_current
Definition: XMLTreeWalker.h:117
AttributeIterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok, bool end=false)
Definition: XMLTreeWalker.cpp:1460
AttributeIterator & operator++()
Definition: XMLTreeWalker.cpp:1423
std::size_t m_index
Definition: XMLTreeWalker.h:116
bool operator==(const XMLTreeWalker::AttributeIterator &rhs) const
Definition: XMLTreeWalker.cpp:1455
Definition: XMLTreeWalker.h:72
const std::string getValue() const
Definition: XMLTreeWalker.cpp:1401
const std::string getName() const
Definition: XMLTreeWalker.cpp:1391
bool operator==(const XMLTreeWalker::Attribute &rhs) const
Definition: XMLTreeWalker.cpp:1406
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:93
std::size_t m_index
Definition: XMLTreeWalker.h:92
Attribute(const XMLTreeNodePtr_t &node, std::size_t index, TokenizerFun_t tok)
Definition: XMLTreeWalker.cpp:1411
int getValueId() const
Definition: XMLTreeWalker.cpp:1382
const std::string getNamespace() const
Definition: XMLTreeWalker.cpp:1396
int getId() const
Definition: XMLTreeWalker.cpp:1360
XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:91
Definition: XMLTreeWalker.h:124
Iterator & operator++()
Definition: XMLTreeWalker.cpp:1474
XMLTreeNodePtr_t m_node
Definition: XMLTreeWalker.h:140
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:142
bool operator==(const XMLTreeWalker::Iterator &rhs) const
Definition: XMLTreeWalker.cpp:1506
const XMLTreeWalker * operator->() const
Definition: XMLTreeWalker.cpp:1499
const XMLTreeWalker & operator*() const
Definition: XMLTreeWalker.cpp:1492
XMLTreeWalker m_current
Definition: XMLTreeWalker.h:141
Iterator(const XMLTreeNodePtr_t &node, TokenizerFun_t tok)
Definition: XMLTreeWalker.cpp:1511
Definition: XMLTreeWalker.h:28
int getId() const
Definition: XMLTreeWalker.cpp:1283
bool isText() const
Definition: XMLTreeWalker.cpp:1276
int(* TokenizerFun_t)(const char *, std::size_t)
Definition: XMLTreeWalker.h:34
bool hasAttributes() const
Definition: XMLTreeWalker.cpp:1330
const XMLTreeWalker getParent() const
Definition: XMLTreeWalker.cpp:1255
XMLTreeWalker(const XMLTreeNodePtr_t &p, TokenizerFun_t tok=0)
Definition: XMLTreeWalker.cpp:1354
const std::string getName() const
Definition: XMLTreeWalker.cpp:1306
Iterator begin() const
Definition: XMLTreeWalker.cpp:1232
AttributeIterator beginAttributes() const
Definition: XMLTreeWalker.cpp:1338
XMLTreeNodePtr_t m_impl
Definition: XMLTreeWalker.h:67
const std::string & getText() const
Definition: XMLTreeWalker.cpp:1322
const Iterator end() const
Definition: XMLTreeWalker.cpp:1240
bool empty() const
Definition: XMLTreeWalker.cpp:1224
CSSSelectResultsPtr_t getStyle(const XMLStylesheets_t &sheets, bool quirks=false, const CSSStylesheetPtr_t &inlineSheet=CSSStylesheetPtr_t()) const
Definition: XMLTreeWalker.cpp:1524
bool hasParent() const
Definition: XMLTreeWalker.cpp:1248
const AttributeIterator endAttributes() const
Definition: XMLTreeWalker.cpp:1346
bool isElement() const
Definition: XMLTreeWalker.cpp:1269
bool isDocument() const
Definition: XMLTreeWalker.cpp:1262
const std::string getNamespace() const
Definition: XMLTreeWalker.cpp:1314
TokenizerFun_t m_tok
Definition: XMLTreeWalker.h:68
@ p
Definition: EBOOKHTMLToken.h:116
@ lhs
Definition: EBOOKHTMLToken.h:290
@ rhs
Definition: EBOOKHTMLToken.h:309
Definition: BBeBCollector.cpp:19
std::deque< XMLStylesheet > XMLStylesheets_t
Definition: XMLStylesheet.h:51
boost::intrusive_ptr< XMLTreeNode > XMLTreeNodePtr_t
Definition: XMLTreeNode.h:24
std::shared_ptr< css_select_results > CSSSelectResultsPtr_t
Definition: libebook_libcss.h:25
std::shared_ptr< css_stylesheet > CSSStylesheetPtr_t
Definition: libebook_libcss.h:23
bool operator!=(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition: XMLTreeNode.cpp:445
Definition: XMLTreeWalker.h:150
std::ptrdiff_t difference_type
Definition: XMLTreeWalker.h:159
libebook::XMLTreeWalker::Attribute & reference_type
Definition: XMLTreeWalker.h:162
std::forward_iterator_tag iterator_category
Definition: XMLTreeWalker.h:160
libebook::XMLTreeWalker::Attribute value_type
Definition: XMLTreeWalker.h:158
libebook::XMLTreeWalker::Attribute * pointer_type
Definition: XMLTreeWalker.h:161
std::ptrdiff_t difference_type
Definition: XMLTreeWalker.h:169
std::forward_iterator_tag iterator_category
Definition: XMLTreeWalker.h:170
libebook::XMLTreeWalker * pointer_type
Definition: XMLTreeWalker.h:171
libebook::XMLTreeWalker & reference_type
Definition: XMLTreeWalker.h:172
libebook::XMLTreeWalker value_type
Definition: XMLTreeWalker.h:168

Generated for libe-book by doxygen 1.9.3