13#ifndef SEEN_INKSCAPE_XML_NODE_H
14#define SEEN_INKSCAPE_XML_NODE_H
34using AttributeVector = std::vector<AttributeRecord, Inkscape::GC::Alloc<AttributeRecord>>;
104 virtual char const *
name()
const = 0;
257 double val,
double default_value);
476 virtual bool equal(
Node const *other,
bool recursive,
bool skip_ids =
false) = 0;
574 template <
typename T>
581 template <
typename iterT>
588 for (
auto &
child : *
this) {
591 if (found !=
nullptr) {
Cartesian point / 2D vector and related operations.
Cairo::RefPtr< Cairo::Region > clean
Two-dimensional point that doubles as a vector.
A base class for anchored objects.
Non-owning reference to 'const char*' Main-purpose: avoid overloads of type f(char*,...
const char * data() const noexcept
Interface for XML node observers.
Interface for refcounted XML nodes.
virtual Node const * root() const =0
bool setAttributeSvgLength(Util::const_char_ptr key, SVGLength const &val)
virtual Node * parent()=0
Get the parent of this node.
virtual Node * next()=0
Get the next sibling of this node.
virtual void synthesizeEvents(NodeObserver &observer)=0
Generate a sequence of events corresponding to the state of this node.
Node * findChildPath(iterT itr, iterT end)
template reshuffling to make the more useful findChildPath cleaner
bool copyAttribute(Util::const_char_ptr key, Node const *source_node, bool remove_if_empty=false)
Copy attribute value from another node to this node.
virtual void addSubtreeObserver(NodeObserver &observer)=0
Add an object that will be notified of the changes to this node and its descendants.
virtual void addChild(Node *child, Node *after)=0
Insert another node as a child of this node.
virtual void recursivePrintTree(unsigned level)=0
virtual void setCodeUnsafe(int code)=0
Set the integer GQuark code for the name of the node.
Node * findChildPath(T list)
depth first search to find a node
virtual void setPosition(int pos)=0
Set the position of this node in parent's child order.
virtual void changeOrder(Node *child, Node *after)=0
Move a given node in this node's child order.
virtual Node const * next() const =0
virtual int code() const =0
Get the integer code corresponding to the node's name.
virtual void appendChild(Node *child)=0
Append a node as the last child of this node.
virtual Node const * prev() const =0
virtual char const * name() const =0
Get the name of the element node.
virtual void cleanOriginal(Node *src, char const *key)=0
Remove all elements that not in src node.
virtual const AttributeVector & attributeList() const =0
Get a list of the node's attributes.
double getAttributeDouble(Util::const_char_ptr key, double default_value=0.0) const
void setAttributeOrRemoveIfEmpty(Inkscape::Util::const_char_ptr key, Inkscape::Util::const_char_ptr value)
Change an attribute of this node.
iterator end()
Helper to use the standard lib container functions.
void addChildAtPos(Node *child, unsigned pos)
Insert another node as a child of this node.
void setAttribute(Util::const_char_ptr key, Util::const_char_ptr value)
Change an attribute of this node.
virtual Document const * document() const =0
virtual void removeSubtreeObserver(NodeObserver &observer)=0
Remove an object from the subtree observers list.
virtual Node * nthChild(unsigned index)=0
Get the child of this node with a given index.
bool setAttributeInt(Util::const_char_ptr key, int val)
virtual Node * duplicate(Document *doc) const =0
Create a duplicate of this node.
virtual Node const * parent() const =0
virtual Node const * nthChild(unsigned index) const =0
virtual Node * firstChild()=0
Get the first child of this node.
virtual unsigned position() const =0
Get the index of this node in parent's child order.
virtual void setContent(char const *value)=0
Set the content of a text or comment node.
bool setAttributeSvgNonDefaultDouble(Util::const_char_ptr key, double val, double default_value)
Geom::Point getAttributePoint(Util::const_char_ptr key, Geom::Point default_value={}) const
virtual bool equal(Node const *other, bool recursive, bool skip_ids=false)=0
Compare 2 nodes equality.
virtual void setAttributeImpl(char const *key, char const *value)=0
bool setAttributePoint(Util::const_char_ptr key, Geom::Point const &val)
virtual void mergeFrom(Node const *src, char const *key, bool extension=false, bool clean=false)=0
Merge all children of another node with the current.
bool setAttributeCssDouble(Util::const_char_ptr key, double val)
Set a property attribute to val [slightly rounded], in the format required for CSS properties: in par...
virtual char const * attribute(char const *key) const =0
Get the string representation of a node's attribute.
void removeAttribute(Inkscape::Util::const_char_ptr key)
Remove an attribute of this node.
virtual char const * content() const =0
Get the content of a text or comment node.
virtual Node const * firstChild() const =0
virtual Node const * lastChild() const =0
virtual void addObserver(NodeObserver &observer)=0
Add an object that will be notified of the changes to this node.
virtual bool matchAttributeName(char const *partial_name) const =0
Check whether this node has any attribute that matches a string.
virtual Document * document()=0
Get the node's associated document.
int getAttributeInt(Util::const_char_ptr key, int default_value=0) const
bool setAttributeBoolean(Util::const_char_ptr key, bool val)
virtual void removeChild(Node *child)=0
Remove a child of this node.
virtual unsigned childCount() const =0
Get the number of children of this node.
iterator begin()
Iterator over children.
virtual NodeType type() const =0
Get the type of the node.
bool operator==(const std::string &name) const
Compare a node by looking at its name to a string.
virtual void removeObserver(NodeObserver &observer)=0
Remove an object from the list of observers.
bool setAttributeSvgDouble(Util::const_char_ptr key, double val)
For attributes where an exponent is allowed.
virtual Node * lastChild()=0
Get the last child of this node.
virtual Node * root()=0
Get the root node of this node's document.
bool getAttributeBoolean(Util::const_char_ptr key, bool default_value=false) const
Parses the boolean value of an attribute "key" in repr and sets val accordingly, or to false if the a...
Inkscape::XML::NodeSiblingIterator iterator
NodeObserver const * observer
Inkscape::GC::Alloc - GC-aware STL allocator.
Inkscape::Util::ForwardPointerIterator< Node, NodeSiblingIteratorStrategy > NodeSiblingIterator
NodeType
Enumeration containing all supported node types.
@ DOCUMENT_NODE
Top-level document node. Do not confuse with the root node.
@ PI_NODE
Processing instruction node, e.g. <?xml version="1.0" encoding="utf-8" standalone="no"?...
@ COMMENT_NODE
Comment node, e.g. <!– some comment –>.
@ ELEMENT_NODE
Regular element node, e.g. <group />.
@ TEXT_NODE
Text node, e.g. "Some text" in <group>Some text</group> is represented by a text node.
std::vector< AttributeRecord, Inkscape::GC::Alloc< AttributeRecord > > AttributeVector
Helper class to stream background task notifications as a series of messages.
static cairo_user_data_key_t key
Interface for XML documents.