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
21namespace libebook
22{
23
24struct XMLTreeNode;
25typedef boost::intrusive_ptr<XMLTreeNode> XMLTreeNodePtr_t;
26
28{
30 {
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 {
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 std::shared_ptr<Configuration> ConfigurationPtr_t;
68
70 {
72 mutable int id;
73 mutable bool idSet;
74
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
87 AttributeData(const LWCStringPtr_t &name, const LWCStringPtr_t &ns, const LWCStringPtr_t &val);
89 };
90
91public:
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
125private:
126 // disable copying
129};
130
131bool operator==(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs);
132bool operator!=(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs);
133bool caselessEqual(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs);
134
137
140
143
144}
145
146#endif // XMLTREENODE_H_INCLUDED
147
148/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
XMLTreeNode::ConfigurationPtr_t config
Definition EBOOKHTMLParser.cpp:177
string name
Definition HTMLHelpStream.cpp:80
Definition BBeBCollector.cpp:19
void intrusive_ptr_add_ref(XMLTreeNode *const p)
Definition XMLTreeNode.cpp:483
boost::intrusive_ptr< lwc_string > LWCStringPtr_t
Definition libebook_libcss.h:27
bool operator==(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition XMLTreeNode.cpp:440
void intrusive_ptr_release(XMLTreeNode *const p)
Definition XMLTreeNode.cpp:488
boost::intrusive_ptr< XMLTreeNode > XMLTreeNodePtr_t
Definition XMLTreeNode.h:25
bool caselessEqual(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition XMLTreeNode.cpp:450
bool operator!=(const XMLTreeNode::QName &lhs, const XMLTreeNode::QName &rhs)
Definition XMLTreeNode.cpp:445
Definition XMLTreeNode.h:80
QName qname
Definition XMLTreeNode.h:81
AttributeData()
Definition XMLTreeNode.cpp:352
bool idSet
Definition XMLTreeNode.h:84
int id
Definition XMLTreeNode.h:83
LWCStringPtr_t value
Definition XMLTreeNode.h:82
Definition XMLTreeNode.h:50
bool caseless
Definition XMLTreeNode.h:51
std::deque< QName > classes
Definition XMLTreeNode.h:53
std::deque< LinkId_t > links
A list of element / attribute pairs representing a "link".
Definition XMLTreeNode.h:62
std::deque< QName > ids
Definition XMLTreeNode.h:54
std::deque< QName > langs
Definition XMLTreeNode.h:55
Definition XMLTreeNode.h:70
int id
Definition XMLTreeNode.h:72
QName qname
Definition XMLTreeNode.h:71
ElementData()
Definition XMLTreeNode.cpp:338
bool idSet
Definition XMLTreeNode.h:73
Definition XMLTreeNode.h:39
LWCStringPtr_t ns
Definition XMLTreeNode.h:41
QName()
Definition XMLTreeNode.cpp:317
LWCStringPtr_t name
Definition XMLTreeNode.h:40
Definition XMLTreeNode.h:28
XMLTreeNodePtr_t parent
Definition XMLTreeNode.h:102
NodeType type
Definition XMLTreeNode.h:95
XMLTreeNodePtr_t insertChildBefore(const XMLTreeNodePtr_t &child, const XMLTreeNodePtr_t &selected)
Definition XMLTreeNode.cpp:410
XMLTreeNode & operator=(const XMLTreeNode &)
ConfigurationPtr_t configuration
Definition XMLTreeNode.h:96
std::shared_ptr< Configuration > ConfigurationPtr_t
Definition XMLTreeNode.h:67
std::string text
Definition XMLTreeNode.h:100
int refcount
Definition XMLTreeNode.h:112
void removeChild(const XMLTreeNodePtr_t &child)
Definition XMLTreeNode.cpp:416
XMLTreeNodePtr_t last
Definition XMLTreeNode.h:108
ElementData self
Definition XMLTreeNode.h:98
void transferChildren(const XMLTreeNodePtr_t &newParent)
Definition XMLTreeNode.cpp:422
XMLTreeNodePtr_t appendChild(const XMLTreeNodePtr_t &child)
Definition XMLTreeNode.cpp:404
XMLTreeNodePtr_t first
Definition XMLTreeNode.h:107
XMLTreeNodePtr_t prev
Definition XMLTreeNode.h:104
std::deque< AttributeData > attributes
Definition XMLTreeNode.h:99
size_t elements
Definition XMLTreeNode.h:110
bool hasChildren(bool ignoreText=false) const
Definition XMLTreeNode.cpp:434
void addAttributes(const std::deque< AttributeData > &attrs)
Definition XMLTreeNode.cpp:428
~XMLTreeNode()
Definition XMLTreeNode.cpp:392
NodeType
Definition XMLTreeNode.h:30
@ NODE_TYPE_ELEMENT
Definition XMLTreeNode.h:32
@ NODE_TYPE_TEXT
Definition XMLTreeNode.h:33
@ NODE_TYPE_DOCTYPE
Definition XMLTreeNode.h:35
@ NODE_TYPE_DOCUMENT
Definition XMLTreeNode.h:31
@ NODE_TYPE_COMMENT
Definition XMLTreeNode.h:34
std::pair< QName, QName > LinkId_t
Definition XMLTreeNode.h:47
XMLTreeNodePtr_t next
Definition XMLTreeNode.h:105
XMLTreeNodePtr_t clone(bool deep=false) const
Definition XMLTreeNode.cpp:398
XMLTreeNode(const XMLTreeNode &)

Generated for libe-book by doxygen 1.9.7