LeechCraft  0.6.70-16373-g319c272718
Modular cross-platform feature rich live environment.
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 
17 class QSize;
18 
19 namespace 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 }
Nodes TableGrid(size_t rows, size_t cols, const std::function< Nodes(size_t, size_t)> &cell)
Definition: xmlnode.cpp:142
#define UTIL_SLL_API
Definition: sllconfig.h:16
static UTIL_SLL_API Tag WithText(const QString &name, const QString &contents)
Definition: xmlnode.cpp:34
QString Name_
Definition: xmlnode.h:37
UTIL_SLL_API Tag & WithAttr(QString, QString) &&
Definition: xmlnode.cpp:71
Tag Body(Nodes &&children)
Definition: xmlnode.cpp:106
std::variant< Tag, QString > Node
Definition: xmlnode.h:25
Tag Html(Nodes &&children)
Definition: xmlnode.cpp:81
UTIL_SLL_API const Tag Br
Definition: xmlnode.cpp:79
Tag Charset(const QString &charset)
Definition: xmlnode.cpp:91
Q_DECL_IMPORT const QString Tags
Tag Image(const QString &url)
Definition: xmlnode.cpp:111
Tag Title(const QString &title)
Definition: xmlnode.cpp:96
concept HtmlRepr
Definition: xmlnode.h:33
QVector< std::pair< QString, QString > > TagAttrs
Definition: xmlnode.h:21
Tag Style(const QString &style)
Definition: xmlnode.cpp:101
Tag P(Nodes &&children)
Definition: xmlnode.cpp:137
Tag Ul(Nodes &&children)
Definition: xmlnode.cpp:132
UTIL_SLL_API T ToHtml(T prefix={}) const
constexpr auto operator+(RawStr< N1, Char > s1, CtString< N2, Char > s2) noexcept
Definition: ctstring.h:145
TagAttrs Attrs_
Definition: xmlnode.h:38
Nodes Children_
Definition: xmlnode.h:40
Tag Li(Nodes &&children)
Definition: xmlnode.cpp:127
QVector< Node > Nodes
Definition: xmlnode.h:26