Xml_node::Unquoted utility for attribute values

The new utility can be used to revert quoted XML attribute values.
Such quoting is needed whenever an attribute value can contain '"'
characters. E.g., in the menu_view's <label text="..."> widget.

Issue #1757
This commit is contained in:
Norman Feske 2020-01-14 23:02:24 +01:00 committed by Christian Helmuth
parent d70cf314d8
commit 567d9f7910

View File

@ -16,11 +16,13 @@
#include <base/log.h> #include <base/log.h>
#include <util/token.h> #include <util/token.h>
#include <util/noncopyable.h>
#include <base/exception.h> #include <base/exception.h>
namespace Genode { namespace Genode {
class Xml_attribute; class Xml_attribute;
class Xml_node; class Xml_node;
class Xml_unquoted;
} }
@ -276,6 +278,8 @@ class Genode::Xml_node
*/ */
class Tag; class Tag;
friend class Xml_unquoted;
public: public:
/********************* /*********************
@ -1105,4 +1109,38 @@ class Genode::Xml_node
} }
}; };
class Genode::Xml_unquoted : Noncopyable
{
private:
struct
{
char const *base;
size_t len;
} const _content_ptr;
public:
template <size_t N>
Xml_unquoted(String<N> const &string)
: _content_ptr({ string.string(), string.length() - 1})
{ }
void print(Output &out) const
{
char const *src = _content_ptr.base;
size_t len = _content_ptr.len;
while (len > 0) {
Xml_node::Decoded_character const decoded_character(src, len);
Genode::print(out, Char(decoded_character.character));
src += decoded_character.encoded_len;
len -= decoded_character.encoded_len;
}
}
};
#endif /* _INCLUDE__UTIL__XML_NODE_H_ */ #endif /* _INCLUDE__UTIL__XML_NODE_H_ */