11 #include <QXmlStreamWriter> 19 nodes.prepend (std::move (node));
25 nodes.push_back (std::move (node));
31 return { std::move (n1), std::move (n2) };
36 return { .
Name_ = name, .Children_ = { contents } };
41 void TagToHtml (
const Tag& tag, QXmlStreamWriter& w)
43 w.writeStartElement (tag.
Name_);
45 for (
const auto& [name, value] : tag.
Attrs_)
46 w.writeAttribute (name, value);
50 [&w] (
const QString& str) { w.writeCharacters (str); },
51 [&w] (
const Tag& childTag) { TagToHtml (childTag, w); });
63 QXmlStreamWriter w { &result };
73 Attrs_.push_back ({ std::move (key), std::move (value) });
86 .Attrs_ = { {
"xmlns"_qs,
"http://www.w3.org/1999/xhtml" } },
87 .Children_ = std::move (children),
93 return { .
Name_ =
"meta"_qs, .Attrs_ = { {
"charset"_qs, charset } } };
98 return { .
Name_ =
"title"_qs, .Children_ = { title } };
103 return { .
Name_ =
"style"_qs, .Children_ = { style } };
108 return { .
Name_ =
"body"_qs, .Children_ = std::move (children) };
113 return { .
Name_ =
"img"_qs, .Attrs_ = { {
"src"_qs, url } } };
118 const auto& w = QString::number (size.width ());
119 const auto& h = QString::number (size.height ());
123 .Attrs_ = { {
"src"_qs, url }, {
"width"_qs, w }, {
"height"_qs, h } },
129 return { .
Name_ =
"li"_qs, .Children_ = std::move (children) };
134 return { .
Name_ =
"ul"_qs, .Children_ = std::move (children) };
139 return { .
Name_ =
"p"_qs, .Children_ = std::move (children) };
145 result.reserve (rows);
147 for (
size_t r = 0; r < rows; ++r)
150 rowCells.reserve (cols);
151 for (
size_t c = 0; c < cols; ++c)
152 rowCells.push_back (
Tag { .Name_ =
"td"_qs, .Children_ = cell (r, c) });
154 result.push_back (
Tag { .
Name_ =
"tr"_qs, .Children_ = std::move (rowCells) });
static UTIL_SLL_API Tag WithText(const QString &name, const QString &contents)
UTIL_SLL_API Tag & WithAttr(QString, QString) &&
std::variant< Tag, QString > Node
Q_DECL_IMPORT const QString Tags
auto Visit(const Either< Left, Right > &either, Args &&... args)
UTIL_SLL_API T ToHtml(T prefix={}) const
constexpr auto operator+(RawStr< N1, Char > s1, CtString< N2, Char > s2) noexcept