mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-12-16 03:08:52 +08:00
120 lines
23 KiB
HTML
120 lines
23 KiB
HTML
<!doctype html><html lang=en dir=ltr><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content='
|
|
error_info.hpp
|
|
#
|
|
|
|
In error_info.hpp, definitions for error_info and functions to format it are provided.
|
|
|
|
toml::error_info
|
|
#
|
|
|
|
namespace toml
|
|
{
|
|
struct error_info
|
|
{
|
|
error_info(std::string t, source_location l, std::string m, std::string s = "");
|
|
error_info(std::string t, std::vector<std::pair<source_location, std::string>> l, std::string s = "");
|
|
|
|
std::string const& title() const noexcept;
|
|
std::string & title() noexcept;
|
|
|
|
std::vector<std::pair<source_location, std::string>> const& locations() const noexcept;
|
|
void add_locations(source_location loc, std::string msg) noexcept;
|
|
|
|
std::string const& suffix() const noexcept;
|
|
std::string & suffix() noexcept;
|
|
};
|
|
|
|
template<typename ... Ts>
|
|
error_info make_error_info(
|
|
std::string title, source_location loc, std::string msg, Ts&& ... tail);
|
|
|
|
std::string format_error(const std::string& errkind, const error_info& err);
|
|
std::string format_error(const error_info& err);
|
|
|
|
template<typename ... Ts>
|
|
std::string format_error(std::string title,
|
|
source_location loc, std::string msg, Ts&& ... tail);
|
|
|
|
std::ostream& operator<<(std::ostream& os, const error_info& e);
|
|
}
|
|
|
|
Member Functions
|
|
#
|
|
|
|
|
|
Constructor (title, loc, msg, suffix)
|
|
#
|
|
|
|
Constructs error_info with specified title, location information loc, message msg, and optional suffix.'><meta name=theme-color media="(prefers-color-scheme: light)" content="#ffffff"><meta name=theme-color media="(prefers-color-scheme: dark)" content="#343a40"><meta name=color-scheme content="light dark"><meta property="og:url" content="https://toruniina.github.io/toml11/docs/reference/error_info/"><meta property="og:site_name" content="toml11"><meta property="og:title" content="error_info.hpp"><meta property="og:description" content='error_info.hpp # In error_info.hpp, definitions for error_info and functions to format it are provided.
|
|
toml::error_info # namespace toml { struct error_info { error_info(std::string t, source_location l, std::string m, std::string s = ""); error_info(std::string t, std::vector<std::pair<source_location, std::string>> l, std::string s = ""); std::string const& title() const noexcept; std::string & title() noexcept; std::vector<std::pair<source_location, std::string>> const& locations() const noexcept; void add_locations(source_location loc, std::string msg) noexcept; std::string const& suffix() const noexcept; std::string & suffix() noexcept; }; template<typename ... Ts> error_info make_error_info( std::string title, source_location loc, std::string msg, Ts&& ... tail); std::string format_error(const std::string& errkind, const error_info& err); std::string format_error(const error_info& err); template<typename ... Ts> std::string format_error(std::string title, source_location loc, std::string msg, Ts&& ... tail); std::ostream& operator<<(std::ostream& os, const error_info& e); } Member Functions # Constructor (title, loc, msg, suffix) # Constructs error_info with specified title, location information loc, message msg, and optional suffix.'><meta property="og:locale" content="en"><meta property="og:type" content="article"><meta property="article:section" content="docs"><title>error_info.hpp | toml11</title><link rel=manifest href=/toml11/manifest.json><link rel=icon href=/toml11/favicon.png><link rel=canonical href=https://toruniina.github.io/toml11/docs/reference/error_info/><link rel=alternate hreflang=ja href=https://toruniina.github.io/toml11/ja/docs/reference/error_info/ title=error_info.hpp><link rel=stylesheet href=/toml11/book.min.6d8037b375fe949eee1b70501c5fb9478914c9c5eb3ef7696163fd3031c69421.css integrity="sha256-bYA3s3X+lJ7uG3BQHF+5R4kUycXrPvdpYWP9MDHGlCE=" crossorigin=anonymous><script defer src=/toml11/fuse.min.js></script><script defer src=/toml11/en.search.min.87bec23503963d7026bfa3a917b92707789d315c9c9e005e23226b35dce643f5.js integrity="sha256-h77CNQOWPXAmv6OpF7knB3idMVycngBeIyJrNdzmQ/U=" crossorigin=anonymous></script></head><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control>
|
|
<input type=checkbox class="hidden toggle" id=toc-control><main class="container flex"><aside class=book-menu><div class=book-menu-content><nav><h2 class=book-brand><a class="flex align-center" href=/toml11/><span>toml11</span></a></h2><div class="book-search hidden"><input type=text id=book-search-input placeholder=Search aria-label=Search maxlength=64 data-hotkeys=s/><div class="book-search-spinner hidden"></div><ul id=book-search-results></ul></div><script>document.querySelector(".book-search").classList.remove("hidden")</script><ul class=book-languages><li><input type=checkbox id=languages class=toggle>
|
|
<label for=languages class="flex justify-between"><a role=button class="flex align-center"><img src=/toml11/svg/translate.svg class=book-icon alt=Languages>
|
|
English</a></label><ul><li><a href=https://toruniina.github.io/toml11/ja/docs/reference/error_info/>日本語</a></li></ul></li></ul><ul><li><a href=/toml11/docs/installation/>installation</a><ul></ul></li><li><input type=checkbox id=section-291123c850af98d8b815ccdbb4c33657 class=toggle>
|
|
<label for=section-291123c850af98d8b815ccdbb4c33657 class="flex justify-between"><a href=/toml11/docs/features/>features</a></label><ul><li><a href=/toml11/docs/features/parsing_files/>parsing files</a></li><li><a href=/toml11/docs/features/value/>getting values</a></li><li><a href=/toml11/docs/features/error_message/>error message</a></li><li><a href=/toml11/docs/features/serialize/>serializing values</a></li><li><a href=/toml11/docs/features/configure_types/>configuring types</a></li><li><a href=/toml11/docs/features/literal/>toml literal</a></li><li><a href=/toml11/docs/features/toml_spec/>toml spec</a></li><li><a href=/toml11/docs/features/extension/>extension</a></li></ul></li><li><input type=checkbox id=section-e2e812e55021b82e114feaae98f1a02e class=toggle checked>
|
|
<label for=section-e2e812e55021b82e114feaae98f1a02e class="flex justify-between"><a href=/toml11/docs/reference/>reference</a></label><ul><li><a href=/toml11/docs/reference/color/>color.hpp</a></li><li><a href=/toml11/docs/reference/comments/>comments.hpp</a></li><li><a href=/toml11/docs/reference/conversion/>conversion.hpp</a></li><li><a href=/toml11/docs/reference/datetime/>datetime.hpp</a></li><li><a href=/toml11/docs/reference/error_info/ class=active>error_info.hpp</a></li><li><a href=/toml11/docs/reference/exception/>exception.hpp</a></li><li><a href=/toml11/docs/reference/find/>find.hpp</a></li><li><a href=/toml11/docs/reference/format/>format.hpp</a></li><li><a href=/toml11/docs/reference/from/>from.hpp</a></li><li><a href=/toml11/docs/reference/get/>get.hpp</a></li><li><a href=/toml11/docs/reference/into/>into.hpp</a></li><li><a href=/toml11/docs/reference/literal/>literal.hpp</a></li><li><a href=/toml11/docs/reference/ordered_map/>ordered_map.hpp</a></li><li><a href=/toml11/docs/reference/parser/>parser.hpp</a></li><li><a href=/toml11/docs/reference/result/>result.hpp</a></li><li><a href=/toml11/docs/reference/serializer/>serializer.hpp</a></li><li><a href=/toml11/docs/reference/source_location/>source_location.hpp</a></li><li><a href=/toml11/docs/reference/spec/>spec.hpp</a></li><li><a href=/toml11/docs/reference/toml_fwd/>toml_fwd.hpp</a></li><li><a href=/toml11/docs/reference/toml/>toml.hpp</a></li><li><a href=/toml11/docs/reference/types/>types.hpp</a></li><li><a href=/toml11/docs/reference/value_t/>value_t.hpp</a></li><li><a href=/toml11/docs/reference/value/>value.hpp</a></li><li><a href=/toml11/docs/reference/version/>version.hpp</a></li><li><a href=/toml11/docs/reference/visit/>visit.hpp</a></li></ul></li><li><a href=/toml11/docs/changelog/>changelog</a><ul></ul></li></ul><ul><li><a href=https://github.com/ToruNiina/toml11 target=_blank rel=noopener>GitHub</a></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class=book-page><header class=book-header><div class="flex align-center justify-between"><label for=menu-control><img src=/toml11/svg/menu.svg class=book-icon alt=Menu>
|
|
</label><strong>error_info.hpp</strong>
|
|
<label for=toc-control><img src=/toml11/svg/toc.svg class=book-icon alt="Table of Contents"></label></div><aside class="hidden clearfix"><nav id=TableOfContents><ul><li><a href=#error_infohpp>error_info.hpp</a></li><li><a href=#tomlerror_info><code>toml::error_info</code></a><ul><li><a href=#member-functions>Member Functions</a><ul><li><a href=#constructor-title-loc-msg-suffix>Constructor (<code>title, loc, msg, suffix</code>)</a></li><li><a href=#constructor-title-loc-msg--suffix>Constructor (<code>title, [{loc, msg}, ...], suffix</code>)</a></li><li><a href=#stdstring-title><code>std::string title()</code></a></li><li><a href=#stdvectorstdpairsource_location-stdstring-locations><code>std::vector<std::pair<source_location, std::string>> locations()</code></a></li><li><a href=#stdstring-suffix><code>std::string suffix()</code></a></li></ul></li><li><a href=#non-member-functions>Non-Member Functions</a><ul><li><a href=#make_error_info><code>make_error_info</code></a></li><li><a href=#format_error><code>format_error</code></a></li><li><a href=#stream-operator>Stream Operator</a></li></ul></li></ul></li><li><a href=#related>Related</a></li></ul></nav></aside></header><article class="markdown book-article"><h1 id=error_infohpp>error_info.hpp
|
|
<a class=anchor href=#error_infohpp>#</a></h1><p>In <code>error_info.hpp</code>, definitions for <code>error_info</code> and functions to format it are provided.</p><h1 id=tomlerror_info><code>toml::error_info</code>
|
|
<a class=anchor href=#tomlerror_info>#</a></h1><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>namespace</span> toml
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>struct</span> <span style=color:#a6e22e>error_info</span>
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span> error_info(std<span style=color:#f92672>::</span>string t, source_location l, std<span style=color:#f92672>::</span>string m, std<span style=color:#f92672>::</span>string s <span style=color:#f92672>=</span> <span style=color:#e6db74>""</span>);
|
|
</span></span><span style=display:flex><span> error_info(std<span style=color:#f92672>::</span>string t, std<span style=color:#f92672>::</span>vector<span style=color:#f92672><</span>std<span style=color:#f92672>::</span>pair<span style=color:#f92672><</span>source_location, std<span style=color:#f92672>::</span>string<span style=color:#f92672>>></span> l, std<span style=color:#f92672>::</span>string s <span style=color:#f92672>=</span> <span style=color:#e6db74>""</span>);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> title() <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>noexcept</span>;
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string <span style=color:#f92672>&</span> title() <span style=color:#66d9ef>noexcept</span>;
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>vector<span style=color:#f92672><</span>std<span style=color:#f92672>::</span>pair<span style=color:#f92672><</span>source_location, std<span style=color:#f92672>::</span>string<span style=color:#f92672>>></span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> locations() <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>noexcept</span>;
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>void</span> <span style=color:#a6e22e>add_locations</span>(source_location loc, std<span style=color:#f92672>::</span>string msg) <span style=color:#66d9ef>noexcept</span>;
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> suffix() <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>noexcept</span>;
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string <span style=color:#f92672>&</span> suffix() <span style=color:#66d9ef>noexcept</span>;
|
|
</span></span><span style=display:flex><span>};
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672><</span><span style=color:#66d9ef>typename</span> ... Ts<span style=color:#f92672>></span>
|
|
</span></span><span style=display:flex><span>error_info make_error_info(
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string title, source_location loc, std<span style=color:#f92672>::</span>string msg, Ts<span style=color:#f92672>&&</span> ... tail);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&</span> errkind, <span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&</span> err);
|
|
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&</span> err);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672><</span><span style=color:#66d9ef>typename</span> ... Ts<span style=color:#f92672>></span>
|
|
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(std<span style=color:#f92672>::</span>string title,
|
|
</span></span><span style=display:flex><span> source_location loc, std<span style=color:#f92672>::</span>string msg, Ts<span style=color:#f92672>&&</span> ... tail);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672><<</span>(std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&</span> os, <span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&</span> e);
|
|
</span></span><span style=display:flex><span>}
|
|
</span></span></code></pre></div><h2 id=member-functions>Member Functions
|
|
<a class=anchor href=#member-functions>#</a></h2><h3 id=constructor-title-loc-msg-suffix>Constructor (<code>title, loc, msg, suffix</code>)
|
|
<a class=anchor href=#constructor-title-loc-msg-suffix>#</a></h3><p>Constructs <code>error_info</code> with specified <code>title</code>, location information <code>loc</code>, message <code>msg</code>, and optional <code>suffix</code>.</p><p><code>suffix</code> defaults to empty.</p><h3 id=constructor-title-loc-msg--suffix>Constructor (<code>title, [{loc, msg}, ...], suffix</code>)
|
|
<a class=anchor href=#constructor-title-loc-msg--suffix>#</a></h3><p>Constructs <code>error_info</code> with specified <code>title</code>, an array of location-message pairs <code>[{loc, msg}, ...]</code>, and optional <code>suffix</code>.</p><p><code>suffix</code> defaults to empty.</p><h3 id=stdstring-title><code>std::string title()</code>
|
|
<a class=anchor href=#stdstring-title>#</a></h3><p>Returns the title of the error message.</p><h3 id=stdvectorstdpairsource_location-stdstring-locations><code>std::vector<std::pair<source_location, std::string>> locations()</code>
|
|
<a class=anchor href=#stdvectorstdpairsource_location-stdstring-locations>#</a></h3><p>Returns the list of locations where errors occurred along with their respective messages.</p><p>Multiple locations can be specified.</p><h3 id=stdstring-suffix><code>std::string suffix()</code>
|
|
<a class=anchor href=#stdstring-suffix>#</a></h3><p>Returns the suffix message to display at the end, providing hints or additional information.</p><h2 id=non-member-functions>Non-Member Functions
|
|
<a class=anchor href=#non-member-functions>#</a></h2><h3 id=make_error_info><code>make_error_info</code>
|
|
<a class=anchor href=#make_error_info>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672><</span><span style=color:#66d9ef>typename</span> ... Ts<span style=color:#f92672>></span>
|
|
</span></span><span style=display:flex><span>error_info make_error_info(
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>string title, source_location loc, std<span style=color:#f92672>::</span>string msg, Ts<span style=color:#f92672>&&</span> ... tail);
|
|
</span></span></code></pre></div><p>Creates a new <code>error_info</code>.</p><p>Must be followed by a <code>msg</code> related to <code>source_location</code> or <code>basic_value</code>.</p><p>Overloads are added in <a href=https://toruniina.github.io/toml11/docs/reference/value/#tomlmake_error_info><code>value.hpp</code></a> when passing <code>toml::basic_value</code> instead of <code>source_location</code>.</p><p>Possible to pass <code>suffix</code> at the end.</p><h3 id=format_error><code>format_error</code>
|
|
<a class=anchor href=#format_error>#</a></h3><p>Formats <code>error_info</code> as follows:</p><pre tabindex=0><code>{title}
|
|
--> {locations().at(0).first.file_name()}
|
|
|
|
|
1 | {locations().at(0).first.line()}
|
|
| ^-- {locations().at(0).second}
|
|
|
|
|
2 | {locations().at(1).first.line()}
|
|
| ^-- {locations().at(1).second}
|
|
{suffix}
|
|
</code></pre><p>If file names differ between two <code>source_location</code>, the file name is displayed again.</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string<span style=color:#f92672>&</span> errkind, <span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&</span> err);
|
|
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(<span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&</span> err);
|
|
</span></span></code></pre></div><p>Formats <code>error_info</code>.</p><p>If <code>errkind</code> is not provided, a red-bold <code>[error]</code> prefix is added before <code>title</code>.</p><p>If <code>errkind</code> is provided (including an empty string), it replaces <code>[error]</code>.</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span><span style=color:#66d9ef>namespace</span> toml
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672><</span><span style=color:#66d9ef>typename</span> ... Ts<span style=color:#f92672>></span>
|
|
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string format_error(std<span style=color:#f92672>::</span>string title,
|
|
</span></span><span style=display:flex><span> source_location loc, std<span style=color:#f92672>::</span>string msg, Ts<span style=color:#f92672>&&</span> ... tail);
|
|
</span></span><span style=display:flex><span>} <span style=color:#75715e>// toml
|
|
</span></span></span></code></pre></div><p>Returns a formatted string using <code>format_error</code> for <code>error_info</code> created with <code>make_error_info</code>.</p><p>Overloads are added in <a href=https://toruniina.github.io/toml11/docs/reference/value/#tomlformat_error><code>value.hpp</code></a> when passing <code>toml::basic_value</code> instead of <code>source_location</code>.</p><h3 id=stream-operator>Stream Operator
|
|
<a class=anchor href=#stream-operator>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-cpp data-lang=cpp><span style=display:flex><span>std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&</span> <span style=color:#66d9ef>operator</span><span style=color:#f92672><<</span>(std<span style=color:#f92672>::</span>ostream<span style=color:#f92672>&</span> os, <span style=color:#66d9ef>const</span> error_info<span style=color:#f92672>&</span> e);
|
|
</span></span></code></pre></div><p>Calls <code>format_error(e)</code> and outputs it.</p><h1 id=related>Related
|
|
<a class=anchor href=#related>#</a></h1><ul><li><a href=https://toruniina.github.io/toml11/docs/reference/color/>color.hpp</a></li><li><a href=https://toruniina.github.io/toml11/docs/reference/parser/>parser.hpp</a></li><li><a href=https://toruniina.github.io/toml11/docs/reference/source_location/>source_location.hpp</a></li></ul></article><footer class=book-footer><div class="flex flex-wrap justify-between"></div><script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script></footer><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><nav id=TableOfContents><ul><li><a href=#error_infohpp>error_info.hpp</a></li><li><a href=#tomlerror_info><code>toml::error_info</code></a><ul><li><a href=#member-functions>Member Functions</a><ul><li><a href=#constructor-title-loc-msg-suffix>Constructor (<code>title, loc, msg, suffix</code>)</a></li><li><a href=#constructor-title-loc-msg--suffix>Constructor (<code>title, [{loc, msg}, ...], suffix</code>)</a></li><li><a href=#stdstring-title><code>std::string title()</code></a></li><li><a href=#stdvectorstdpairsource_location-stdstring-locations><code>std::vector<std::pair<source_location, std::string>> locations()</code></a></li><li><a href=#stdstring-suffix><code>std::string suffix()</code></a></li></ul></li><li><a href=#non-member-functions>Non-Member Functions</a><ul><li><a href=#make_error_info><code>make_error_info</code></a></li><li><a href=#format_error><code>format_error</code></a></li><li><a href=#stream-operator>Stream Operator</a></li></ul></li></ul></li><li><a href=#related>Related</a></li></ul></nav></div></aside></main></body></html> |