hemplate

Simple XML template engine
git clone git://git.dimitrijedobrota.com/hemplate.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING

commit a536f3b212a1990caa284a84ddc005384f9b4d1b
parent c55146c0f8bd570c95dbd40b1891cd34556a2ca7
author Dimitrije Dobrota <mail@dimitrijedobrota.com>
date Wed, 23 Apr 2025 09:27:43 +0200

Simplify tagging

Diffstat:
M include/hemplate/atom.hpp | +++++++++++++++++++++++++++ ---------------------------
M include/hemplate/classes.hpp | +++ -------------
M include/hemplate/element.hpp | +++++++++++ --------------
M include/hemplate/html.hpp | +++++++++++++++++++++++++++++++++++++++++ -----------------------------------------
M include/hemplate/rss.hpp | +++++++++++++++++++++++++++++++++ ---------------------------------
M include/hemplate/sitemap.hpp | ++++++ ------

6 files changed, 194 insertions(+), 207 deletions(-)


diff --git a/ include/hemplate/atom.hpp b/ include/hemplate/atom.hpp

@@ -10,7 +10,7 @@ std::string format_time(std::int64_t sec); std::string format_time_now(); class HEMPLATE_EXPORT feed
: public element_builder<tag<"feed">, element::Type::Boolean>
: public element_builder<"feed", element::Type::Boolean>
{ public: static constexpr const auto default_xmlns = "http://www.w3.org/2005/Atom";

@@ -45,32 +45,32 @@ using hemplate::xml; // clang-format off // NOLINTBEGIN *-identifier-naming
using author = element_builder<tag<"author">, element::Type::Boolean>;
using category = element_builder<tag<"category">, element::Type::Boolean>;
using content = element_builder<tag<"content">, element::Type::Boolean>;
using contributor = element_builder<tag<"contributor">, element::Type::Boolean>;
using div = element_builder<tag<"div">, element::Type::Boolean>;
using email = element_builder<tag<"email">, element::Type::Boolean>;
using entry = element_builder<tag<"entry">, element::Type::Boolean>;
using generator = element_builder<tag<"generator">, element::Type::Boolean>;
using icon = element_builder<tag<"icon">, element::Type::Boolean>;
using id = element_builder<tag<"id">, element::Type::Boolean>;
using intervalBlock = element_builder<tag<"intervalBlock">, element::Type::Boolean>;
using link = element_builder<tag<"link">, element::Type::Boolean>;
using logo = element_builder<tag<"logo">, element::Type::Boolean>;
using meterReading = element_builder<tag<"meterReading">, element::Type::Boolean>;
using name = element_builder<tag<"name">, element::Type::Boolean>;
using published = element_builder<tag<"published">, element::Type::Boolean>;
using readingType = element_builder<tag<"readingType">, element::Type::Boolean>;
using rights = element_builder<tag<"rights">, element::Type::Boolean>;
using source = element_builder<tag<"source">, element::Type::Boolean>;
using subtitle = element_builder<tag<"subtitle">, element::Type::Boolean>;
using summary = element_builder<tag<"summary">, element::Type::Boolean>;
using text = element_builder<tag<"">, element::Type::Boolean>;
using title = element_builder<tag<"title">, element::Type::Boolean>;
using updated = element_builder<tag<"updated">, element::Type::Boolean>;
using uri = element_builder<tag<"uri">, element::Type::Boolean>;
using usagePoint = element_builder<tag<"usagePoint">, element::Type::Boolean>;
using author = element_builder<"author", element::Type::Boolean>;
using category = element_builder<"category", element::Type::Boolean>;
using content = element_builder<"content", element::Type::Boolean>;
using contributor = element_builder<"contributor", element::Type::Boolean>;
using div = element_builder<"div", element::Type::Boolean>;
using email = element_builder<"email", element::Type::Boolean>;
using entry = element_builder<"entry", element::Type::Boolean>;
using generator = element_builder<"generator", element::Type::Boolean>;
using icon = element_builder<"icon", element::Type::Boolean>;
using id = element_builder<"id", element::Type::Boolean>;
using intervalBlock = element_builder<"intervalBlock", element::Type::Boolean>;
using link = element_builder<"link", element::Type::Boolean>;
using logo = element_builder<"logo", element::Type::Boolean>;
using meterReading = element_builder<"meterReading", element::Type::Boolean>;
using name = element_builder<"name", element::Type::Boolean>;
using published = element_builder<"published", element::Type::Boolean>;
using readingType = element_builder<"readingType", element::Type::Boolean>;
using rights = element_builder<"rights", element::Type::Boolean>;
using source = element_builder<"source", element::Type::Boolean>;
using subtitle = element_builder<"subtitle", element::Type::Boolean>;
using summary = element_builder<"summary", element::Type::Boolean>;
using text = element_builder<"", element::Type::Boolean>;
using title = element_builder<"title", element::Type::Boolean>;
using updated = element_builder<"updated", element::Type::Boolean>;
using uri = element_builder<"uri", element::Type::Boolean>;
using usagePoint = element_builder<"usagePoint", element::Type::Boolean>;
// NOLINTEND *-identifier-naming // clang-format on

diff --git a/ include/hemplate/classes.hpp b/ include/hemplate/classes.hpp

@@ -11,17 +11,10 @@ namespace hemplate {
template<based::string_literal Name>
struct tag
{
static auto get_name() { return Name.data(); }
static auto get_size() { return Name.size(); }
};
using comment = element_builder<"comment", element::Type::Comment>;
using transparent = element_builder<"transparent", element::Type::Transparent>;
using comment = element_builder<tag<"comment">, element::Type::Comment>;
class HEMPLATE_EXPORT xml
: public element_builder<tag<"xml">, element::Type::Xml>
class HEMPLATE_EXPORT xml : public element_builder<"xml", element::Type::Xml>
{ public: static constexpr const auto default_version = "1.0";

@@ -35,9 +28,6 @@ public: } };
using transparent =
element_builder<tag<"transparent">, element::Type::Transparent>;
template<std::ranges::forward_range R> transparent transform(const R& range, based::Procedure<std::ranges::range_value_t<R>> auto proc)

diff --git a/ include/hemplate/element.hpp b/ include/hemplate/element.hpp

@@ -4,6 +4,8 @@ #include <string> #include <vector>
#include <based/string.hpp>
#include "hemplate/attribute.hpp" #include "hemplate/hemplate_export.hpp"

@@ -104,7 +106,7 @@ private: { }
template<typename Tag, element::Type MyType>
template<based::string_literal Tag, element::Type MyType>
friend class element_builder; void render_atomic(std::ostream& out, std::size_t indent_value) const;

@@ -130,51 +132,46 @@ public: bool tgl_state() const { return *m_state = !*m_state; } };
template<typename Tag, element::Type MyType>
template<based::string_literal Tag, element::Type MyType>
class HEMPLATE_EXPORT element_builder : public element { static bool m_state; // NOLINT public: explicit element_builder(std::string_view data)
: element(m_state, MyType, Tag::get_name(), data)
: element(m_state, MyType, Tag.data(), data)
{ } explicit element_builder(const std::derived_from<element> auto&... children)
: element(m_state, MyType, Tag::get_name(), children...)
: element(m_state, MyType, Tag.data(), children...)
{ } explicit element_builder(std::span<const element> children)
: element(m_state, MyType, Tag::get_name(), children)
: element(m_state, MyType, Tag.data(), children)
{ } explicit element_builder(attribute_list attributes, std::string_view data)
: element(m_state, MyType, Tag::get_name(), std::move(attributes), data)
: element(m_state, MyType, Tag.data(), std::move(attributes), data)
{ } explicit element_builder(attribute_list attributes, const std::derived_from<element> auto&... children)
: element(m_state,
MyType,
Tag::get_name(),
std::move(attributes),
children...)
: element(m_state, MyType, Tag.data(), std::move(attributes), children...)
{ } explicit element_builder(attribute_list attributes, std::span<const element> children)
: element(
m_state, MyType, Tag::get_name(), std::move(attributes), children)
: element(m_state, MyType, Tag.data(), std::move(attributes), children)
{ } };
template<typename Tag, element::Type Type>
template<based::string_literal Tag, element::Type Type>
bool element_builder<Tag, Type>::m_state = false; // NOLINT } // namespace hemplate

diff --git a/ include/hemplate/html.hpp b/ include/hemplate/html.hpp

@@ -13,120 +13,120 @@ using hemplate::xml; // clang-format off // NOLINTBEGIN *-identifier-naming
using abbr = element_builder<tag<"abbr">, element::Type::Boolean>;
using address = element_builder<tag<"address">, element::Type::Boolean>;
using a = element_builder<tag<"a">, element::Type::Boolean>;
using area = element_builder<tag<"area">, element::Type::Atomic>;
using article = element_builder<tag<"article">, element::Type::Boolean>;
using aside = element_builder<tag<"aside">, element::Type::Boolean>;
using audio = element_builder<tag<"audio">, element::Type::Boolean>;
using base = element_builder<tag<"base">, element::Type::Atomic>;
using bdi = element_builder<tag<"bdi">, element::Type::Boolean>;
using bdo = element_builder<tag<"bdo">, element::Type::Boolean>;
using b = element_builder<tag<"b">, element::Type::Boolean>;
using blockquote = element_builder<tag<"blockquote">, element::Type::Boolean>;
using body = element_builder<tag<"body">, element::Type::Boolean>;
using br = element_builder<tag<"br">, element::Type::Atomic>;
using button = element_builder<tag<"button">, element::Type::Boolean>;
using canvas = element_builder<tag<"canvas">, element::Type::Boolean>;
using caption = element_builder<tag<"caption">, element::Type::Boolean>;
using cite = element_builder<tag<"cite">, element::Type::Boolean>;
using code = element_builder<tag<"code">, element::Type::Boolean>;
using col = element_builder<tag<"col">, element::Type::Atomic>;
using colgroup = element_builder<tag<"colgroup">, element::Type::Boolean>;
using data = element_builder<tag<"data">, element::Type::Boolean>;
using datalist = element_builder<tag<"datalist">, element::Type::Boolean>;
using dd = element_builder<tag<"dd">, element::Type::Boolean>;
using del = element_builder<tag<"del">, element::Type::Boolean>;
using details = element_builder<tag<"details">, element::Type::Boolean>;
using dfn = element_builder<tag<"dfn">, element::Type::Boolean>;
using dialog = element_builder<tag<"dialog">, element::Type::Boolean>;
using div = element_builder<tag<"div">, element::Type::Boolean>;
using dl = element_builder<tag<"dl">, element::Type::Boolean>;
using doctype = element_builder<tag<"!DOCTYPE html">, element::Type::Atomic>;
using dt = element_builder<tag<"dt">, element::Type::Boolean>;
using embed = element_builder<tag<"embed">, element::Type::Atomic>;
using em = element_builder<tag<"em">, element::Type::Boolean>;
using fieldset = element_builder<tag<"fieldset">, element::Type::Boolean>;
using figcaption = element_builder<tag<"figcaption">, element::Type::Boolean>;
using figure = element_builder<tag<"figure">, element::Type::Boolean>;
using footer = element_builder<tag<"footer">, element::Type::Boolean>;
using form = element_builder<tag<"form">, element::Type::Boolean>;
using h1 = element_builder<tag<"h1">, element::Type::Boolean>;
using h2 = element_builder<tag<"h2">, element::Type::Boolean>;
using h3 = element_builder<tag<"h3">, element::Type::Boolean>;
using h4 = element_builder<tag<"h4">, element::Type::Boolean>;
using h5 = element_builder<tag<"h5">, element::Type::Boolean>;
using h6 = element_builder<tag<"h6">, element::Type::Boolean>;
using head = element_builder<tag<"head">, element::Type::Boolean>;
using header = element_builder<tag<"header">, element::Type::Boolean>;
using hgroup = element_builder<tag<"hgroup">, element::Type::Boolean>;
using hr = element_builder<tag<"hr">, element::Type::Atomic>;
using html = element_builder<tag<"html">, element::Type::Boolean>;
using i = element_builder<tag<"i">, element::Type::Boolean>;
using iframe = element_builder<tag<"iframe">, element::Type::Boolean>;
using img = element_builder<tag<"img">, element::Type::Atomic>;
using input = element_builder<tag<"input">, element::Type::Atomic>;
using ins = element_builder<tag<"ins">, element::Type::Boolean>;
using kbd = element_builder<tag<"kbd">, element::Type::Boolean>;
using label = element_builder<tag<"label">, element::Type::Boolean>;
using legend = element_builder<tag<"legend">, element::Type::Boolean>;
using li = element_builder<tag<"li">, element::Type::Boolean>;
using link = element_builder<tag<"link">, element::Type::Atomic>;
using main = element_builder<tag<"main">, element::Type::Boolean>;
using map = element_builder<tag<"map">, element::Type::Boolean>;
using mark = element_builder<tag<"mark">, element::Type::Boolean>;
using menu = element_builder<tag<"menu">, element::Type::Boolean>;
using meta = element_builder<tag<"meta">, element::Type::Atomic>;
using meter = element_builder<tag<"meter">, element::Type::Boolean>;
using nav = element_builder<tag<"nav">, element::Type::Boolean>;
using noscript = element_builder<tag<"noscript">, element::Type::Boolean>;
using object = element_builder<tag<"object">, element::Type::Boolean>;
using ol = element_builder<tag<"ol">, element::Type::Boolean>;
using optgroup = element_builder<tag<"optgroup">, element::Type::Boolean>;
using option = element_builder<tag<"option">, element::Type::Boolean>;
using output = element_builder<tag<"output">, element::Type::Boolean>;
using p = element_builder<tag<"p">, element::Type::Boolean>;
using param = element_builder<tag<"param">, element::Type::Atomic>;
using picture = element_builder<tag<"picture">, element::Type::Boolean>;
using pre = element_builder<tag<"pre">, element::Type::Boolean>;
using progress = element_builder<tag<"progress">, element::Type::Boolean>;
using q = element_builder<tag<"q">, element::Type::Boolean>;
using rp = element_builder<tag<"rp">, element::Type::Boolean>;
using rt = element_builder<tag<"rt">, element::Type::Boolean>;
using ruby = element_builder<tag<"ruby">, element::Type::Boolean>;
using s = element_builder<tag<"s">, element::Type::Boolean>;
using samp = element_builder<tag<"samp">, element::Type::Boolean>;
using script = element_builder<tag<"script">, element::Type::Boolean>;
using search = element_builder<tag<"search">, element::Type::Boolean>;
using section = element_builder<tag<"section">, element::Type::Boolean>;
using select = element_builder<tag<"select">, element::Type::Boolean>;
using small = element_builder<tag<"small">, element::Type::Boolean>;
using source = element_builder<tag<"source">, element::Type::Atomic>;
using span = element_builder<tag<"span">, element::Type::Boolean>;
using strong = element_builder<tag<"strong">, element::Type::Boolean>;
using style = element_builder<tag<"style">, element::Type::Boolean>;
using sub = element_builder<tag<"sub">, element::Type::Boolean>;
using summary = element_builder<tag<"summary">, element::Type::Boolean>;
using sup = element_builder<tag<"sup">, element::Type::Boolean>;
using svg = element_builder<tag<"svg">, element::Type::Boolean>;
using table = element_builder<tag<"table">, element::Type::Boolean>;
using tbody = element_builder<tag<"tbody">, element::Type::Boolean>;
using td = element_builder<tag<"td">, element::Type::Boolean>;
using textarea = element_builder<tag<"textarea">, element::Type::Boolean>;
using text = element_builder<tag<"">, element::Type::Boolean>;
using tfoot = element_builder<tag<"tfoot">, element::Type::Boolean>;
using th = element_builder<tag<"th">, element::Type::Boolean>;
using thead = element_builder<tag<"thead">, element::Type::Boolean>;
using time = element_builder<tag<"time">, element::Type::Boolean>;
using title = element_builder<tag<"title">, element::Type::Boolean>;
using tr = element_builder<tag<"tr">, element::Type::Boolean>;
using track = element_builder<tag<"track">, element::Type::Atomic>;
using u = element_builder<tag<"u">, element::Type::Boolean>;
using ul = element_builder<tag<"ul">, element::Type::Boolean>;
using var = element_builder<tag<"var">, element::Type::Boolean>;
using video = element_builder<tag<"video">, element::Type::Boolean>;
using wbr = element_builder<tag<"wbr">, element::Type::Atomic>;
using abbr = element_builder<"abbr", element::Type::Boolean>;
using address = element_builder<"address", element::Type::Boolean>;
using a = element_builder<"a", element::Type::Boolean>;
using area = element_builder<"area", element::Type::Atomic>;
using article = element_builder<"article", element::Type::Boolean>;
using aside = element_builder<"aside", element::Type::Boolean>;
using audio = element_builder<"audio", element::Type::Boolean>;
using base = element_builder<"base", element::Type::Atomic>;
using bdi = element_builder<"bdi", element::Type::Boolean>;
using bdo = element_builder<"bdo", element::Type::Boolean>;
using b = element_builder<"b", element::Type::Boolean>;
using blockquote = element_builder<"blockquote", element::Type::Boolean>;
using body = element_builder<"body", element::Type::Boolean>;
using br = element_builder<"br", element::Type::Atomic>;
using button = element_builder<"button", element::Type::Boolean>;
using canvas = element_builder<"canvas", element::Type::Boolean>;
using caption = element_builder<"caption", element::Type::Boolean>;
using cite = element_builder<"cite", element::Type::Boolean>;
using code = element_builder<"code", element::Type::Boolean>;
using col = element_builder<"col", element::Type::Atomic>;
using colgroup = element_builder<"colgroup", element::Type::Boolean>;
using data = element_builder<"data", element::Type::Boolean>;
using datalist = element_builder<"datalist", element::Type::Boolean>;
using dd = element_builder<"dd", element::Type::Boolean>;
using del = element_builder<"del", element::Type::Boolean>;
using details = element_builder<"details", element::Type::Boolean>;
using dfn = element_builder<"dfn", element::Type::Boolean>;
using dialog = element_builder<"dialog", element::Type::Boolean>;
using div = element_builder<"div", element::Type::Boolean>;
using dl = element_builder<"dl", element::Type::Boolean>;
using doctype = element_builder<"!DOCTYPE html", element::Type::Atomic>;
using dt = element_builder<"dt", element::Type::Boolean>;
using embed = element_builder<"embed", element::Type::Atomic>;
using em = element_builder<"em", element::Type::Boolean>;
using fieldset = element_builder<"fieldset", element::Type::Boolean>;
using figcaption = element_builder<"figcaption", element::Type::Boolean>;
using figure = element_builder<"figure", element::Type::Boolean>;
using footer = element_builder<"footer", element::Type::Boolean>;
using form = element_builder<"form", element::Type::Boolean>;
using h1 = element_builder<"h1", element::Type::Boolean>;
using h2 = element_builder<"h2", element::Type::Boolean>;
using h3 = element_builder<"h3", element::Type::Boolean>;
using h4 = element_builder<"h4", element::Type::Boolean>;
using h5 = element_builder<"h5", element::Type::Boolean>;
using h6 = element_builder<"h6", element::Type::Boolean>;
using head = element_builder<"head", element::Type::Boolean>;
using header = element_builder<"header", element::Type::Boolean>;
using hgroup = element_builder<"hgroup", element::Type::Boolean>;
using hr = element_builder<"hr", element::Type::Atomic>;
using html = element_builder<"html", element::Type::Boolean>;
using i = element_builder<"i", element::Type::Boolean>;
using iframe = element_builder<"iframe", element::Type::Boolean>;
using img = element_builder<"img", element::Type::Atomic>;
using input = element_builder<"input", element::Type::Atomic>;
using ins = element_builder<"ins", element::Type::Boolean>;
using kbd = element_builder<"kbd", element::Type::Boolean>;
using label = element_builder<"label", element::Type::Boolean>;
using legend = element_builder<"legend", element::Type::Boolean>;
using li = element_builder<"li", element::Type::Boolean>;
using link = element_builder<"link", element::Type::Atomic>;
using main = element_builder<"main", element::Type::Boolean>;
using map = element_builder<"map", element::Type::Boolean>;
using mark = element_builder<"mark", element::Type::Boolean>;
using menu = element_builder<"menu", element::Type::Boolean>;
using meta = element_builder<"meta", element::Type::Atomic>;
using meter = element_builder<"meter", element::Type::Boolean>;
using nav = element_builder<"nav", element::Type::Boolean>;
using noscript = element_builder<"noscript", element::Type::Boolean>;
using object = element_builder<"object", element::Type::Boolean>;
using ol = element_builder<"ol", element::Type::Boolean>;
using optgroup = element_builder<"optgroup", element::Type::Boolean>;
using option = element_builder<"option", element::Type::Boolean>;
using output = element_builder<"output", element::Type::Boolean>;
using p = element_builder<"p", element::Type::Boolean>;
using param = element_builder<"param", element::Type::Atomic>;
using picture = element_builder<"picture", element::Type::Boolean>;
using pre = element_builder<"pre", element::Type::Boolean>;
using progress = element_builder<"progress", element::Type::Boolean>;
using q = element_builder<"q", element::Type::Boolean>;
using rp = element_builder<"rp", element::Type::Boolean>;
using rt = element_builder<"rt", element::Type::Boolean>;
using ruby = element_builder<"ruby", element::Type::Boolean>;
using s = element_builder<"s", element::Type::Boolean>;
using samp = element_builder<"samp", element::Type::Boolean>;
using script = element_builder<"script", element::Type::Boolean>;
using search = element_builder<"search", element::Type::Boolean>;
using section = element_builder<"section", element::Type::Boolean>;
using select = element_builder<"select", element::Type::Boolean>;
using small = element_builder<"small", element::Type::Boolean>;
using source = element_builder<"source", element::Type::Atomic>;
using span = element_builder<"span", element::Type::Boolean>;
using strong = element_builder<"strong", element::Type::Boolean>;
using style = element_builder<"style", element::Type::Boolean>;
using sub = element_builder<"sub", element::Type::Boolean>;
using summary = element_builder<"summary", element::Type::Boolean>;
using sup = element_builder<"sup", element::Type::Boolean>;
using svg = element_builder<"svg", element::Type::Boolean>;
using table = element_builder<"table", element::Type::Boolean>;
using tbody = element_builder<"tbody", element::Type::Boolean>;
using td = element_builder<"td", element::Type::Boolean>;
using textarea = element_builder<"textarea", element::Type::Boolean>;
using text = element_builder<"", element::Type::Boolean>;
using tfoot = element_builder<"tfoot", element::Type::Boolean>;
using th = element_builder<"th", element::Type::Boolean>;
using thead = element_builder<"thead", element::Type::Boolean>;
using time = element_builder<"time", element::Type::Boolean>;
using title = element_builder<"title", element::Type::Boolean>;
using tr = element_builder<"tr", element::Type::Boolean>;
using track = element_builder<"track", element::Type::Atomic>;
using u = element_builder<"u", element::Type::Boolean>;
using ul = element_builder<"ul", element::Type::Boolean>;
using var = element_builder<"var", element::Type::Boolean>;
using video = element_builder<"video", element::Type::Boolean>;
using wbr = element_builder<"wbr", element::Type::Atomic>;
// NOLINTEND *-identifier-naming // clang-format on

diff --git a/ include/hemplate/rss.hpp b/ include/hemplate/rss.hpp

@@ -10,7 +10,7 @@ std::string format_time(std::int64_t sec); std::string format_time_now(); class HEMPLATE_EXPORT rss
: public element_builder<tag<"rss">, element::Type::Boolean>
: public element_builder<"rss", element::Type::Boolean>
{ public: static constexpr const auto default_version = "2.0";

@@ -46,7 +46,7 @@ public: }; class HEMPLATE_EXPORT atomLink // NOLINT *-identifier-naming
: public element_builder<tag<"atom:link">, element::Type::Boolean>
: public element_builder<"atom:link", element::Type::Boolean>
{ public: static constexpr const auto default_rel = "self";

@@ -103,37 +103,37 @@ using hemplate::xml; // clang-format off // NOLINTBEGIN *-identifier-naming
using author = element_builder<tag<"author">, element::Type::Boolean>;
using category = element_builder<tag<"category">, element::Type::Boolean>;
using channel = element_builder<tag<"channel">, element::Type::Boolean>;
using cloud = element_builder<tag<"cloud">, element::Type::Atomic>;
using comments = element_builder<tag<"comments">, element::Type::Boolean>;
using copyright = element_builder<tag<"copyright">, element::Type::Boolean>;
using description = element_builder<tag<"description">, element::Type::Boolean>;
using docs = element_builder<tag<"docs">, element::Type::Boolean>;
using enclosure = element_builder<tag<"enclosure">, element::Type::Atomic>;
using generator = element_builder<tag<"generator">, element::Type::Boolean>;
using guid = element_builder<tag<"guid">, element::Type::Boolean>;
using height = element_builder<tag<"height">, element::Type::Boolean>;
using image = element_builder<tag<"image">, element::Type::Boolean>;
using item = element_builder<tag<"item">, element::Type::Boolean>;
using language = element_builder<tag<"language">, element::Type::Boolean>;
using lastBuildDate = element_builder<tag<"lastBuildDate">, element::Type::Boolean>;
using link = element_builder<tag<"link">, element::Type::Boolean>;
using managingEditor = element_builder<tag<"managingEditor">, element::Type::Boolean>;
using name = element_builder<tag<"name">, element::Type::Boolean>;
using pubDate = element_builder<tag<"pubDate">, element::Type::Boolean>;
using rating = element_builder<tag<"rating">, element::Type::Boolean>;
using skipDays = element_builder<tag<"skipDays">, element::Type::Boolean>;
using skipHours = element_builder<tag<"skipHours">, element::Type::Boolean>;
using source = element_builder<tag<"source">, element::Type::Boolean>;
using text = element_builder<tag<"">, element::Type::Boolean>;
using textinput = element_builder<tag<"textinput">, element::Type::Boolean>;
using title = element_builder<tag<"title">, element::Type::Boolean>;
using ttl = element_builder<tag<"ttl">, element::Type::Boolean>;
using url = element_builder<tag<"url">, element::Type::Boolean>;
using webMaster = element_builder<tag<"webMaster">, element::Type::Boolean>;
using width = element_builder<tag<"width">, element::Type::Boolean>;
using author = element_builder<"author", element::Type::Boolean>;
using category = element_builder<"category", element::Type::Boolean>;
using channel = element_builder<"channel", element::Type::Boolean>;
using cloud = element_builder<"cloud", element::Type::Atomic>;
using comments = element_builder<"comments", element::Type::Boolean>;
using copyright = element_builder<"copyright", element::Type::Boolean>;
using description = element_builder<"description", element::Type::Boolean>;
using docs = element_builder<"docs", element::Type::Boolean>;
using enclosure = element_builder<"enclosure", element::Type::Atomic>;
using generator = element_builder<"generator", element::Type::Boolean>;
using guid = element_builder<"guid", element::Type::Boolean>;
using height = element_builder<"height", element::Type::Boolean>;
using image = element_builder<"image", element::Type::Boolean>;
using item = element_builder<"item", element::Type::Boolean>;
using language = element_builder<"language", element::Type::Boolean>;
using lastBuildDate = element_builder<"lastBuildDate", element::Type::Boolean>;
using link = element_builder<"link", element::Type::Boolean>;
using managingEditor = element_builder<"managingEditor", element::Type::Boolean>;
using name = element_builder<"name", element::Type::Boolean>;
using pubDate = element_builder<"pubDate", element::Type::Boolean>;
using rating = element_builder<"rating", element::Type::Boolean>;
using skipDays = element_builder<"skipDays", element::Type::Boolean>;
using skipHours = element_builder<"skipHours", element::Type::Boolean>;
using source = element_builder<"source", element::Type::Boolean>;
using text = element_builder<"", element::Type::Boolean>;
using textinput = element_builder<"textinput", element::Type::Boolean>;
using title = element_builder<"title", element::Type::Boolean>;
using ttl = element_builder<"ttl", element::Type::Boolean>;
using url = element_builder<"url", element::Type::Boolean>;
using webMaster = element_builder<"webMaster", element::Type::Boolean>;
using width = element_builder<"width", element::Type::Boolean>;
// NOLINTEND *-identifier-naming // clang-format on

diff --git a/ include/hemplate/sitemap.hpp b/ include/hemplate/sitemap.hpp

@@ -7,7 +7,7 @@ namespace hemplate::sitemap { class HEMPLATE_EXPORT urlset
: public element_builder<tag<"urlset">, element::Type::Boolean>
: public element_builder<"urlset", element::Type::Boolean>
{ public: static constexpr const auto default_xmlns =

@@ -37,11 +37,11 @@ public: // clang-format off // NOLINTBEGIN *-identifier-naming
using changefreq = element_builder<tag<"changefreq">, element::Type::Boolean>;
using lastmod = element_builder<tag<"lastmod">, element::Type::Boolean>;
using loc = element_builder<tag<"loc">, element::Type::Boolean>;
using url = element_builder<tag<"url">, element::Type::Boolean>;
using priority = element_builder<tag<"priority">, element::Type::Boolean>;
using changefreq = element_builder<"changefreq", element::Type::Boolean>;
using lastmod = element_builder<"lastmod", element::Type::Boolean>;
using loc = element_builder<"loc", element::Type::Boolean>;
using url = element_builder<"url", element::Type::Boolean>;
using priority = element_builder<"priority", element::Type::Boolean>;
// NOLINTEND *-identifier-naming // clang-format on