XMLTreeNode.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 XMLTREENODE_H_INCLUDED
11 #define XMLTREENODE_H_INCLUDED
12 
13 #include <deque>
14 #include <string>
15 #include <utility>
16 
17 #include <boost/intrusive_ptr.hpp>
18 
19 #include "libebook_libcss.h"
20 
21 namespace libebook
22 {
23 
24 struct XMLTreeNode;
25 typedef boost::intrusive_ptr<XMLTreeNode> XMLTreeNodePtr_t;
26 
28 {
29  enum NodeType
30  {
33  NODE_TYPE_TEXT = 1 << 3,
35  NODE_TYPE_DOCTYPE = 1 << 5
36  };
37 
38  struct QName
39  {
42 
43  QName();
44  explicit QName(const LWCStringPtr_t &name, const LWCStringPtr_t &ns = LWCStringPtr_t());
45  };
46 
47  typedef std::pair<QName, QName> LinkId_t;
48 
50  {
51  bool caseless;
52 
53  std::deque<QName> classes; //< A list of attributes representing a "class".
54  std::deque<QName> ids; //< a list of attributes representing an "ID".
55  std::deque<QName> langs; //< a list of attributes representing a "lang".
56 
62  std::deque<LinkId_t> links;
63 
64  explicit Configuration(bool caseless_ = false);
65  };
66 
67  typedef boost::shared_ptr<Configuration> ConfigurationPtr_t;
68 
69  struct ElementData
70  {
72  mutable int id;
73  mutable bool idSet;
74 
75  ElementData();
76  explicit ElementData(const LWCStringPtr_t &name, const LWCStringPtr_t &ns = LWCStringPtr_t());
77  };
78 
80  {
83  mutable int id;
84  mutable bool idSet;
85 
86  AttributeData();
87  AttributeData(const LWCStringPtr_t &name, const LWCStringPtr_t &ns, const LWCStringPtr_t &val);
88  AttributeData(const LWCStringPtr_t &name, const LWCStringPtr_t &val);
89  };
90 
91 public:
92  explicit XMLTreeNode(NodeType nodeType, const ConfigurationPtr_t &config = ConfigurationPtr_t());
93  ~XMLTreeNode();
94 
97 
99  std::deque<AttributeData> attributes;
100  std::string text;
101 
103  // siblings
106  // children
109 
110  size_t elements;
111 
112  mutable int refcount;
113 
114  XMLTreeNodePtr_t clone(bool deep = false) const;
115 
118  void removeChild(const XMLTreeNodePtr_t &child);
119  void transferChildren(const XMLTreeNodePtr_t &newParent);
120 
121  void addAttributes(const std::deque<AttributeData> &attrs);
122 
123  bool hasChildren(bool ignoreText = false) const;
124 
125 private:
126  // disable copying
129 };
130 
134 
137 
140 
143 
144 }
145 
146 #endif // XMLTREENODE_H_INCLUDED
147 
148 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
libebook::XMLTreeNode::Configuration
Definition: XMLTreeNode.h:50
libebook::XMLTreeNode::Configuration::ids
std::deque< QName > ids
Definition: XMLTreeNode.h:54
libebook_libcss.h
libebook::XMLTreeNode::NODE_TYPE_DOCTYPE
@ NODE_TYPE_DOCTYPE
Definition: XMLTreeNode.h:35
libebook::XMLTreeNode::~XMLTreeNode
~XMLTreeNode()
Definition: XMLTreeNode.cpp:393
libebook::XMLTreeNode::Configuration::links
std::deque< LinkId_t > links
A list of element / attribute pairs representing a "link".
Definition: XMLTreeNode.h:62
libebook::XMLTreeNode
Definition: XMLTreeNode.h:28
libebook::XMLTreeNode::configuration
ConfigurationPtr_t configuration
Definition: XMLTreeNode.h:96
libebook::XMLTreeNode::appendChild
XMLTreeNodePtr_t appendChild(const XMLTreeNodePtr_t &child)
Definition: XMLTreeNode.cpp:405
libebook::XMLTreeNode::self
ElementData self
Definition: XMLTreeNode.h:98
libebook::XMLTreeNode::NODE_TYPE_DOCUMENT
@ NODE_TYPE_DOCUMENT
Definition: XMLTreeNode.h:31
libebook::XMLTreeNode::insertChildBefore
XMLTreeNodePtr_t insertChildBefore(const XMLTreeNodePtr_t &child, const XMLTreeNodePtr_t &selected)
Definition: XMLTreeNode.cpp:411
libebook::XMLTreeNode::attributes
std::deque< AttributeData > attributes
Definition: XMLTreeNode.h:99
libebook::XMLTreeNode::elements
size_t elements
Definition: XMLTreeNode.h:110
libebook::XMLTreeNode::addAttributes
void addAttributes(const std::deque< AttributeData > &attrs)
Definition: XMLTreeNode.cpp:429
libebook
Definition: CHMParser.cpp:21
libebook::XMLTreeNode::operator=
XMLTreeNode & operator=(const XMLTreeNode &)
libebook::XMLTreeNode::transferChildren
void transferChildren(const XMLTreeNodePtr_t &newParent)
Definition: XMLTreeNode.cpp:423
libebook::XMLTreeNode::QName::name
LWCStringPtr_t name
Definition: XMLTreeNode.h:40
libebook::XMLTreeNode::last
XMLTreeNodePtr_t last
Definition: XMLTreeNode.h:108
libebook::XMLTreeNode::AttributeData::id
int id
Definition: XMLTreeNode.h:83
libebook_utils.h
XMLTreeNode.h
libebook::EBOOKHTMLToken::selected
@ selected
Definition: EBOOKHTMLToken.h:249
libebook::XMLTreeNode::next
XMLTreeNodePtr_t next
Definition: XMLTreeNode.h:105
libebook::XMLTreeNode::ElementData
Definition: XMLTreeNode.h:70
libebook::EBOOKHTMLToken::value
@ value
Definition: EBOOKHTMLToken.h:263
libebook::intrusive_ptr_add_ref
void intrusive_ptr_add_ref(XMLTreeNode *const p)
Definition: XMLTreeNode.cpp:484
libebook::operator!=
bool operator!=(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition: XMLTreeNode.cpp:446
libebook::XMLTreeNode::AttributeData::value
LWCStringPtr_t value
Definition: XMLTreeNode.h:82
libebook::XMLTreeNode::refcount
int refcount
Definition: XMLTreeNode.h:112
libebook::XMLTreeNode::ElementData::ElementData
ElementData()
Definition: XMLTreeNode.cpp:339
libebook::EBOOKHTMLToken::rhs
@ rhs
Definition: EBOOKHTMLToken.h:311
libebook::XMLTreeNode::LinkId_t
std::pair< QName, QName > LinkId_t
Definition: XMLTreeNode.h:47
libebook::XMLTreeNode::NODE_TYPE_TEXT
@ NODE_TYPE_TEXT
Definition: XMLTreeNode.h:33
libebook::EBOOKHTMLToken::target
@ target
Definition: EBOOKHTMLToken.h:258
libebook::XMLTreeNode::QName::QName
QName()
Definition: XMLTreeNode.cpp:318
libebook::EBOOKHTMLToken::id
@ id
Definition: EBOOKHTMLToken.h:205
libebook::XMLTreeNode::ElementData::idSet
bool idSet
Definition: XMLTreeNode.h:73
libebook::operator==
bool operator==(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition: XMLTreeNode.cpp:441
m_qname
const XMLTreeNode::QName & m_qname
Definition: XMLTreeNode.cpp:41
libebook::XMLTreeNode::Configuration::Configuration
Configuration(bool caseless_=false)
Definition: XMLTreeNode.cpp:330
libebook::XMLTreeNode::XMLTreeNode
XMLTreeNode(NodeType nodeType, const ConfigurationPtr_t &config=ConfigurationPtr_t())
Definition: XMLTreeNode.cpp:377
libebook::XMLTreeNode::XMLTreeNode
XMLTreeNode(const XMLTreeNode &)
libebook::XMLTreeNode::AttributeData::qname
QName qname
Definition: XMLTreeNode.h:81
libebook::XMLTreeNode::AttributeData::AttributeData
AttributeData()
Definition: XMLTreeNode.cpp:353
libebook::EBOOKHTMLToken::p
@ p
Definition: EBOOKHTMLToken.h:118
libebook::XMLTreeNode::hasChildren
bool hasChildren(bool ignoreText=false) const
Definition: XMLTreeNode.cpp:435
config
XMLTreeNode::ConfigurationPtr_t config
Definition: EBOOKHTMLParser.cpp:183
libebook::XMLTreeNode::Configuration::caseless
bool caseless
Definition: XMLTreeNode.h:51
name
string name
Definition: CHMStream.cpp:80
libebook::XMLTreeNode::prev
XMLTreeNodePtr_t prev
Definition: XMLTreeNode.h:104
libebook::XMLTreeNode::clone
XMLTreeNodePtr_t clone(bool deep=false) const
Definition: XMLTreeNode.cpp:399
libebook::XMLTreeNode::Configuration::classes
std::deque< QName > classes
Definition: XMLTreeNode.h:53
libebook::XMLTreeNode::QName
Definition: XMLTreeNode.h:39
libebook::XMLTreeNode::AttributeData::idSet
bool idSet
Definition: XMLTreeNode.h:84
libebook::XMLTreeNode::QName::ns
LWCStringPtr_t ns
Definition: XMLTreeNode.h:41
libebook::EBOOKHTMLToken::source
@ source
Definition: EBOOKHTMLToken.h:133
libebook::EBOOKHTMLToken::lhs
@ lhs
Definition: EBOOKHTMLToken.h:292
libebook::XMLTreeNode::first
XMLTreeNodePtr_t first
Definition: XMLTreeNode.h:107
libebook::XMLTreeNode::NodeType
NodeType
Definition: XMLTreeNode.h:30
libebook::XMLTreeNode::NODE_TYPE_ELEMENT
@ NODE_TYPE_ELEMENT
Definition: XMLTreeNode.h:32
libebook::XMLTreeNode::type
NodeType type
Definition: XMLTreeNode.h:95
libebook::XMLTreeNode::AttributeData
Definition: XMLTreeNode.h:80
libebook::XMLTreeNodePtr_t
boost::intrusive_ptr< XMLTreeNode > XMLTreeNodePtr_t
Definition: XMLTreeNode.h:24
libebook::XMLTreeNode::ElementData::id
int id
Definition: XMLTreeNode.h:72
libebook::XMLTreeNode::parent
XMLTreeNodePtr_t parent
Definition: XMLTreeNode.h:102
libebook::XMLTreeNode::NODE_TYPE_COMMENT
@ NODE_TYPE_COMMENT
Definition: XMLTreeNode.h:34
libebook::XMLTreeNode::removeChild
void removeChild(const XMLTreeNodePtr_t &child)
Definition: XMLTreeNode.cpp:417
libebook::caselessEqual
bool caselessEqual(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition: XMLTreeNode.cpp:451
libebook::XMLTreeNode::text
std::string text
Definition: XMLTreeNode.h:100
libebook::XMLTreeNode::ElementData::qname
QName qname
Definition: XMLTreeNode.h:71
libebook::intrusive_ptr_release
void intrusive_ptr_release(XMLTreeNode *const p)
Definition: XMLTreeNode.cpp:489
libebook::XMLTreeNode::ConfigurationPtr_t
boost::shared_ptr< Configuration > ConfigurationPtr_t
Definition: XMLTreeNode.h:67
libebook::XMLTreeNode::Configuration::langs
std::deque< QName > langs
Definition: XMLTreeNode.h:55
libebook::LWCStringPtr_t
boost::intrusive_ptr< lwc_string > LWCStringPtr_t
Definition: libebook_libcss.h:26

Generated for libe-book by doxygen 1.8.18