LeechCraft 0.6.70-17335-ge406ffdcaf
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
xmlnode.h
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
9#pragma once
10
11#include <utility>
12#include <variant>
13#include <QString>
14#include <QVector>
15#include "sllconfig.h"
16
17class QSize;
18
19namespace LC::Util
20{
21 using TagAttrs = QVector<std::pair<QString, QString>>;
22
23 struct Tag;
24
25 using Node = std::variant<Tag, QString>;
26 using Nodes = QVector<Node>;
27
31
32 template<typename T>
33 concept HtmlRepr = std::is_same_v<T, QString> || std::is_same_v<T, QByteArray>;
34
35 struct Tag
36 {
37 QString Name_;
39
41
42 UTIL_SLL_API static Tag WithText (const QString& name, const QString& contents);
43
44 template<HtmlRepr T = QString>
45 [[nodiscard]]
46 UTIL_SLL_API T ToHtml (T prefix = {}) const;
47
48 UTIL_SLL_API Tag& WithAttr (QString, QString) &&;
49 };
50
51 namespace Tags
52 {
53 extern const Tag Br;
54
55 UTIL_SLL_API Tag Html (Nodes&& children);
56 UTIL_SLL_API Tag Charset (const QString& charset);
57 UTIL_SLL_API Tag Title (const QString& title);
58 UTIL_SLL_API Tag Style (const QString& style);
59
60 UTIL_SLL_API Tag Body (Nodes&& children);
61
62 UTIL_SLL_API Tag Image (const QString& url);
63 UTIL_SLL_API Tag Image (const QString& url, const QSize&);
64 UTIL_SLL_API Tag Li (Nodes&& children);
65 UTIL_SLL_API Tag Ul (Nodes&& children);
66
67 UTIL_SLL_API Tag P (Nodes&& children);
68
69 UTIL_SLL_API Nodes TableGrid (size_t rows, size_t cols, const std::function<Nodes (size_t, size_t)>& cell);
70 }
71}
Tag Html(Nodes &&children)
Definition xmlnode.cpp:81
Tag Charset(const QString &charset)
Definition xmlnode.cpp:91
Tag Image(const QString &url)
Definition xmlnode.cpp:111
Tag Li(Nodes &&children)
Definition xmlnode.cpp:127
UTIL_SLL_API const Tag Br
Definition xmlnode.cpp:79
Tag Body(Nodes &&children)
Definition xmlnode.cpp:106
Tag Style(const QString &style)
Definition xmlnode.cpp:101
Tag P(Nodes &&children)
Definition xmlnode.cpp:137
Nodes TableGrid(size_t rows, size_t cols, const std::function< Nodes(size_t, size_t)> &cell)
Definition xmlnode.cpp:142
Tag Title(const QString &title)
Definition xmlnode.cpp:96
Tag Ul(Nodes &&children)
Definition xmlnode.cpp:132
QVector< std::pair< QString, QString > > TagAttrs
Definition xmlnode.h:21
QVector< Node > Nodes
Definition xmlnode.h:26
constexpr auto operator+(RawStr< N1, Char > s1, CtString< N2, Char > s2) noexcept
Definition ctstring.h:145
std::variant< Tag, QString > Node
Definition xmlnode.h:25
#define UTIL_SLL_API
Definition sllconfig.h:16
UTIL_SLL_API T ToHtml(T prefix={}) const
UTIL_SLL_API Tag & WithAttr(QString, QString) &&
Definition xmlnode.cpp:71
QString Name_
Definition xmlnode.h:37
Nodes Children_
Definition xmlnode.h:40
TagAttrs Attrs_
Definition xmlnode.h:38
static UTIL_SLL_API Tag WithText(const QString &name, const QString &contents)
Definition xmlnode.cpp:34