mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-18 19:10:11 +08:00
176 lines
32 KiB
HTML
176 lines
32 KiB
HTML
<!doctype html><html lang=ja dir=ltr><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content='
|
|
TOMLファイルを出力する
|
|
#
|
|
|
|
toml::format を使うと、 toml::value を文字列にすることができます。
|
|
#include <toml.hpp>
|
|
#include <cassert>
|
|
|
|
int main()
|
|
{
|
|
const toml::value v(toml::table{
|
|
{"a", 42},
|
|
{"b", "foo"},
|
|
});
|
|
const std::string s = toml::format(v);
|
|
|
|
const toml::value u = toml::parse_str(s);
|
|
|
|
assert(u.at("a").as_integer() == 42);
|
|
assert(u.at("b").as_string() == "foo");
|
|
|
|
return 0;
|
|
}
|
|
table_type を格納している toml::value が渡されると、それがファイルのルートテーブルとして解釈されます。
|
|
もし table_type 以外を格納している toml::value が渡されると、その値だけがフォーマットされます。
|
|
一部のフォーマット指定では、キーが渡されていないとフォーマットできないことがあります。
|
|
例えば、 toml::array_format::array_of_tables は [[array.of.tables]] の形でフォーマットするので、
|
|
キーへのアクセスを要求します。
|
|
キーを要求するフォーマット指定の値がキーなしで渡された場合、 toml::serialization_error が送出されます。
|
|
他にも、フォーマット指定と矛盾する値が含まれる場合には、 toml::serialization_error が送出されます。
|
|
例えば、 integer_format::hex が指定された整数が負の値を持っている場合や、
|
|
string_format::literal が指定された文字列が改行を含んでいる場合などです。
|
|
フォーマットの指定方法は後述します。
|
|
|
|
キーを渡して出力する
|
|
#
|
|
|
|
toml::format には std::string としてキーを渡すことが可能です。'><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/ja/docs/features/serialize/"><meta property="og:site_name" content="toml11"><meta property="og:title" content="serializing values"><meta property="og:description" content='TOMLファイルを出力する # toml::format を使うと、 toml::value を文字列にすることができます。
|
|
#include <toml.hpp> #include <cassert> int main() { const toml::value v(toml::table{ {"a", 42}, {"b", "foo"}, }); const std::string s = toml::format(v); const toml::value u = toml::parse_str(s); assert(u.at("a").as_integer() == 42); assert(u.at("b").as_string() == "foo"); return 0; } table_type を格納している toml::value が渡されると、それがファイルのルートテーブルとして解釈されます。
|
|
もし table_type 以外を格納している toml::value が渡されると、その値だけがフォーマットされます。
|
|
一部のフォーマット指定では、キーが渡されていないとフォーマットできないことがあります。 例えば、 toml::array_format::array_of_tables は [[array.of.tables]] の形でフォーマットするので、 キーへのアクセスを要求します。
|
|
キーを要求するフォーマット指定の値がキーなしで渡された場合、 toml::serialization_error が送出されます。
|
|
他にも、フォーマット指定と矛盾する値が含まれる場合には、 toml::serialization_error が送出されます。 例えば、 integer_format::hex が指定された整数が負の値を持っている場合や、 string_format::literal が指定された文字列が改行を含んでいる場合などです。
|
|
フォーマットの指定方法は後述します。
|
|
キーを渡して出力する # toml::format には std::string としてキーを渡すことが可能です。'><meta property="og:locale" content="ja"><meta property="og:type" content="article"><meta property="article:section" content="docs"><title>serializing values | 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/ja/docs/features/serialize/><link rel=alternate hreflang=en href=https://toruniina.github.io/toml11/docs/features/serialize/ title="serializing values"><link rel=stylesheet href=/toml11/book.min.ddac3efe7ea4c1007ff53e5a8fd67f12517e5d2e99984d8c67a18668f7ecaa03.css integrity="sha256-3aw+/n6kwQB/9T5aj9Z/ElF+XS6ZmE2MZ6GGaPfsqgM=" crossorigin=anonymous><script defer src=/toml11/fuse.min.js></script><script defer src=/toml11/ja.search.min.13aefbf6a803b591c02d5bc9a01dfe65fe37c31e2915c91573708d38e805d86c.js integrity="sha256-E6779qgDtZHALVvJoB3+Zf43wx4pFckVc3CNOOgF2Gw=" 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/ja/><span>toml11</span></a></h2><div class="book-search hidden"><input type=text id=book-search-input placeholder=検索 aria-label=検索 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>
|
|
日本語</a></label><ul><li><a href=https://toruniina.github.io/toml11/docs/features/serialize/>English</a></li></ul></li></ul><ul><li><a href=/toml11/ja/docs/installation/>installation</a><ul></ul></li><li><input type=checkbox id=section-b4cfb5b55e913a8d853eacf5e8fba05f class=toggle checked>
|
|
<label for=section-b4cfb5b55e913a8d853eacf5e8fba05f class="flex justify-between"><a href=/toml11/ja/docs/features/>features</a></label><ul><li><a href=/toml11/ja/docs/features/parsing_files/>parsing files</a></li><li><a href=/toml11/ja/docs/features/value/>getting values</a></li><li><a href=/toml11/ja/docs/features/error_message/>error message</a></li><li><a href=/toml11/ja/docs/features/serialize/ class=active>serializing values</a></li><li><a href=/toml11/ja/docs/features/configure_types/>configuring types</a></li><li><a href=/toml11/ja/docs/features/literal/>toml literal</a></li><li><a href=/toml11/ja/docs/features/toml_spec/>toml spec</a></li><li><a href=/toml11/ja/docs/features/extension/>extension</a></li></ul></li><li><input type=checkbox id=section-01b096afc5186aea96713b408b47c967 class=toggle>
|
|
<label for=section-01b096afc5186aea96713b408b47c967 class="flex justify-between"><a href=/toml11/ja/docs/reference/>reference</a></label><ul><li><a href=/toml11/ja/docs/reference/color/>color.hpp</a></li><li><a href=/toml11/ja/docs/reference/comments/>comments.hpp</a></li><li><a href=/toml11/ja/docs/reference/conversion/>conversion.hpp</a></li><li><a href=/toml11/ja/docs/reference/datetime/>datetime.hpp</a></li><li><a href=/toml11/ja/docs/reference/error_info/>error_info.hpp</a></li><li><a href=/toml11/ja/docs/reference/exception/>exception.hpp</a></li><li><a href=/toml11/ja/docs/reference/find/>find.hpp</a></li><li><a href=/toml11/ja/docs/reference/format/>format.hpp</a></li><li><a href=/toml11/ja/docs/reference/from/>from.hpp</a></li><li><a href=/toml11/ja/docs/reference/get/>get.hpp</a></li><li><a href=/toml11/ja/docs/reference/into/>into.hpp</a></li><li><a href=/toml11/ja/docs/reference/literal/>literal.hpp</a></li><li><a href=/toml11/ja/docs/reference/ordered_map/>ordered_map.hpp</a></li><li><a href=/toml11/ja/docs/reference/parser/>parser.hpp</a></li><li><a href=/toml11/ja/docs/reference/result/>result.hpp</a></li><li><a href=/toml11/ja/docs/reference/serializer/>serializer.hpp</a></li><li><a href=/toml11/ja/docs/reference/source_location/>source_location.hpp</a></li><li><a href=/toml11/ja/docs/reference/spec/>spec.hpp</a></li><li><a href=/toml11/ja/docs/reference/toml_fwd/>toml_fwd.hpp</a></li><li><a href=/toml11/ja/docs/reference/toml/>toml.hpp</a></li><li><a href=/toml11/ja/docs/reference/types/>types.hpp</a></li><li><a href=/toml11/ja/docs/reference/value_t/>value_t.hpp</a></li><li><a href=/toml11/ja/docs/reference/value/>value.hpp</a></li><li><a href=/toml11/ja/docs/reference/version/>version.hpp</a></li><li><a href=/toml11/ja/docs/reference/visit/>visit.hpp</a></li></ul></li><li><a href=/toml11/ja/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>serializing values</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=#tomlファイルを出力する>TOMLファイルを出力する</a><ul><li><a href=#キーを渡して出力する>キーを渡して出力する</a></li><li><a href=#フォーマットを指定する>フォーマットを指定する</a><ul><li><a href=#整数のフォーマットを指定する>整数のフォーマットを指定する</a></li><li><a href=#配列を単一行複数行にする>配列を単一行・複数行にする</a></li><li><a href=#テーブルをインラインテーブルにする>テーブルをインラインテーブルにする</a></li></ul></li><li><a href=#toml言語バージョンを指定して出力する>TOML言語バージョンを指定して出力する</a></li></ul></li></ul></nav></aside></header><article class="markdown book-article"><h1 id=tomlファイルを出力する>TOMLファイルを出力する
|
|
<a class=anchor href=#toml%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b>#</a></h1><p><code>toml::format</code> を使うと、 <code>toml::value</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:#75715e>#include</span> <span style=color:#75715e><toml.hpp></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e>#include</span> <span style=color:#75715e><cassert></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>int</span> <span style=color:#a6e22e>main</span>()
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>value v(toml<span style=color:#f92672>::</span>table{
|
|
</span></span><span style=display:flex><span> {<span style=color:#e6db74>"a"</span>, <span style=color:#ae81ff>42</span>},
|
|
</span></span><span style=display:flex><span> {<span style=color:#e6db74>"b"</span>, <span style=color:#e6db74>"foo"</span>},
|
|
</span></span><span style=display:flex><span> });
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string s <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>format(v);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>value u <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>parse_str(s);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> assert(u.at(<span style=color:#e6db74>"a"</span>).as_integer() <span style=color:#f92672>==</span> <span style=color:#ae81ff>42</span>);
|
|
</span></span><span style=display:flex><span> assert(u.at(<span style=color:#e6db74>"b"</span>).as_string() <span style=color:#f92672>==</span> <span style=color:#e6db74>"foo"</span>);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> <span style=color:#ae81ff>0</span>;
|
|
</span></span><span style=display:flex><span>}
|
|
</span></span></code></pre></div><p><code>table_type</code> を格納している <code>toml::value</code> が渡されると、それがファイルのルートテーブルとして解釈されます。</p><p>もし <code>table_type</code> 以外を格納している <code>toml::value</code> が渡されると、その値だけがフォーマットされます。</p><p>一部のフォーマット指定では、キーが渡されていないとフォーマットできないことがあります。
|
|
例えば、 <code>toml::array_format::array_of_tables</code> は <code>[[array.of.tables]]</code> の形でフォーマットするので、
|
|
キーへのアクセスを要求します。</p><p>キーを要求するフォーマット指定の値がキーなしで渡された場合、 <code>toml::serialization_error</code> が送出されます。</p><p>他にも、フォーマット指定と矛盾する値が含まれる場合には、 <code>toml::serialization_error</code> が送出されます。
|
|
例えば、 <code>integer_format::hex</code> が指定された整数が負の値を持っている場合や、
|
|
<code>string_format::literal</code> が指定された文字列が改行を含んでいる場合などです。</p><p>フォーマットの指定方法は後述します。</p><h2 id=キーを渡して出力する>キーを渡して出力する
|
|
<a class=anchor href=#%e3%82%ad%e3%83%bc%e3%82%92%e6%b8%a1%e3%81%97%e3%81%a6%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b>#</a></h2><p><code>toml::format</code> には <code>std::string</code> としてキーを渡すことが可能です。</p><p>その場合、ルートテーブルの下にそのキーがあり、渡した値はそのキーに対応すると解釈されます。</p><p>キーが複数段になる場合、 <code>std::vector<std::string></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:#75715e>#include</span> <span style=color:#75715e><toml.hpp></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e>#include</span> <span style=color:#75715e><cassert></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>int</span> <span style=color:#a6e22e>main</span>()
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>value v(toml<span style=color:#f92672>::</span>table{
|
|
</span></span><span style=display:flex><span> {<span style=color:#e6db74>"a"</span>, <span style=color:#ae81ff>42</span>},
|
|
</span></span><span style=display:flex><span> {<span style=color:#e6db74>"b"</span>, <span style=color:#e6db74>"foo"</span>},
|
|
</span></span><span style=display:flex><span> });
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>string s <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>format(<span style=color:#e6db74>"bar"</span>, v);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>value u <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>parse_str(s);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> assert(u.at(<span style=color:#e6db74>"bar"</span>).at(<span style=color:#e6db74>"a"</span>).as_integer() <span style=color:#f92672>==</span> <span style=color:#ae81ff>42</span>);
|
|
</span></span><span style=display:flex><span> assert(u.at(<span style=color:#e6db74>"bar"</span>).at(<span style=color:#e6db74>"b"</span>).as_string() <span style=color:#f92672>==</span> <span style=color:#e6db74>"foo"</span>);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> <span style=color:#ae81ff>0</span>;
|
|
</span></span><span style=display:flex><span>}
|
|
</span></span></code></pre></div><h2 id=フォーマットを指定する>フォーマットを指定する
|
|
<a class=anchor href=#%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b>#</a></h2><p><code>toml::value</code> のそれぞれの型には、対応するフォーマット情報型があります。</p><p><code>toml::value::integer_type</code> には <code>toml::integer_format_info</code> が、
|
|
<code>toml::value::table_type</code> には <code>toml::table_format_info</code> があります。</p><p>これらは、パースした際に設定され、型が変わらない限り値を変更しても引き継がれます。</p><p>また、 <code>as_integer_fmt()</code> や <code>as_table_fmt()</code> といったメンバ関数によってアクセスすることができ、
|
|
直接編集することが可能です。</p><p>以下ではいくつかの例を挙げて使い方を説明します。</p><p>フォーマットへのアクセス方法は
|
|
<a href=https://toruniina.github.io/toml11/ja/docs/reference/value/><code>toml::value</code>のリファレンス</a>を、
|
|
フォーマット情報クラスの完全なリストと詳細は
|
|
<a href=https://toruniina.github.io/toml11/ja/docs/reference/format/>formatのリファレンス</a>を
|
|
参照してください。</p><h3 id=整数のフォーマットを指定する>整数のフォーマットを指定する
|
|
<a class=anchor href=#%e6%95%b4%e6%95%b0%e3%81%ae%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b>#</a></h3><p>整数は、基数と幅、そして <code>_</code> の位置を指定することができます。</p><p><code>hex</code>, <code>oct</code>, <code>bin</code> のとき、指定された幅に達するまでゼロで埋められます。
|
|
<code>dec</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:#75715e>#include</span> <span style=color:#75715e><toml.hpp></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>int</span> <span style=color:#a6e22e>main</span>()
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span> toml<span style=color:#f92672>::</span>value v(<span style=color:#ae81ff>0x00C0'FFEE</span>);
|
|
</span></span><span style=display:flex><span> v.as_integer_fmt().fmt <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>integer_format<span style=color:#f92672>::</span>hex;
|
|
</span></span><span style=display:flex><span> v.as_integer_fmt().width <span style=color:#f92672>=</span> <span style=color:#ae81ff>8</span>;
|
|
</span></span><span style=display:flex><span> v.as_integer_fmt().spacer <span style=color:#f92672>=</span> <span style=color:#ae81ff>4</span>;
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>stirng s <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>format(v);
|
|
</span></span><span style=display:flex><span> assert(s <span style=color:#f92672>==</span> <span style=color:#e6db74>"0x00C0_FFEE"</span>);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> <span style=color:#ae81ff>0</span>;
|
|
</span></span><span style=display:flex><span>}
|
|
</span></span></code></pre></div><p>詳細は、<a href=https://toruniina.github.io/toml11/ja/docs/reference/format/#integer_format>reference</a> を参照してください。</p><h3 id=配列を単一行複数行にする>配列を単一行・複数行にする
|
|
<a class=anchor href=#%e9%85%8d%e5%88%97%e3%82%92%e5%8d%98%e4%b8%80%e8%a1%8c%e8%a4%87%e6%95%b0%e8%a1%8c%e3%81%ab%e3%81%99%e3%82%8b>#</a></h3><p>配列には、 <code>toml::array_format::oneline</code> や <code>toml::array_format::multiline</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-toml data-lang=toml><span style=display:flex><span><span style=color:#75715e># oneline</span>
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>a</span> = [<span style=color:#ae81ff>1</span>, <span style=color:#ae81ff>2</span>, <span style=color:#ae81ff>3</span>, <span style=color:#ae81ff>4</span>, <span style=color:#ae81ff>5</span>]
|
|
</span></span><span style=display:flex><span><span style=color:#75715e># multiline</span>
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>a</span> = [
|
|
</span></span><span style=display:flex><span> <span style=color:#ae81ff>1</span>,
|
|
</span></span><span style=display:flex><span> <span style=color:#ae81ff>2</span>,
|
|
</span></span><span style=display:flex><span> <span style=color:#ae81ff>3</span>,
|
|
</span></span><span style=display:flex><span> <span style=color:#ae81ff>4</span>,
|
|
</span></span><span style=display:flex><span> <span style=color:#ae81ff>5</span>
|
|
</span></span><span style=display:flex><span>]
|
|
</span></span></code></pre></div><p><code>multiline</code> のときは、インデントを指定できます。
|
|
各要素は <code>body_indent</code> の分だけインデントされ、閉じ括弧 <code>]</code> は <code>closing_indent</code> の分だけインデントされます。</p><p>文字種は <code>indent_type</code> で指定され、 <code>toml::indent_char::space</code> または <code>toml::indent_char::tab</code> が選択できます。</p><blockquote class="book-hint warning"><p>インデントに使用する文字種は統一してください。</p><p>一つのファイル内でインデントに異なる文字種が指定された場合、結果は未規定になります。
|
|
何らかのインデントがされますが、全ての箇所で文字種やインデントの深さは不定となります。</p></blockquote><p>また、 <code>array</code> の要素が全て <code>table_type</code> を持つ場合、
|
|
<code>toml::array_format::array_of_tables</code> が指定できます。</p><p><code>array_of_tables</code> を指定せずに <code>multiline</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-toml data-lang=toml><span style=display:flex><span><span style=color:#75715e># multiline</span>
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>a</span> = [
|
|
</span></span><span style=display:flex><span> {<span style=color:#a6e22e>foo</span> = <span style=color:#ae81ff>42</span>},
|
|
</span></span><span style=display:flex><span> {<span style=color:#a6e22e>bar</span> = <span style=color:#e6db74>"hoge"</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:#75715e># array_of_tables</span>
|
|
</span></span><span style=display:flex><span>[[<span style=color:#a6e22e>a</span>]]
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>foo</span> = <span style=color:#ae81ff>42</span>
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span>[[<span style=color:#a6e22e>a</span>]]
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>bar</span> = <span style=color:#e6db74>"hoge"</span>
|
|
</span></span></code></pre></div><p>デフォルトでは、 <code>toml::array_format::default_format</code> が指定されます。
|
|
これは適したフォーマットを自動的に選択します。</p><p>例えば、 <code>default_format</code> で全要素が <code>table_type</code> だった場合、 <code>array_of_tables</code> が選択されます。
|
|
また、十分短い配列は <code>oneline</code> に、長い配列またはネストされた配列などの複雑な配列は <code>multiline</code> になります。</p><p>詳細は、<a href=https://toruniina.github.io/toml11/ja/docs/reference/format/#array_format>reference</a> を参照してください。</p><h3 id=テーブルをインラインテーブルにする>テーブルをインラインテーブルにする
|
|
<a class=anchor href=#%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e3%82%a4%e3%83%b3%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ab%e3%81%99%e3%82%8b>#</a></h3><p>テーブルをインラインテーブルにする際は <code>toml::table_format::oneline</code> を指定します。
|
|
通常のテーブルにする際は、 <code>toml::table_format::multiline</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-toml data-lang=toml><span style=display:flex><span><span style=color:#a6e22e>oneline</span> = {<span style=color:#a6e22e>a</span> = <span style=color:#ae81ff>42</span>, <span style=color:#a6e22e>b</span> = <span style=color:#e6db74>"foo"</span>}
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span>[<span style=color:#a6e22e>multiline</span>]
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>a</span> = <span style=color:#ae81ff>42</span>
|
|
</span></span><span style=display:flex><span><span style=color:#a6e22e>b</span> = <span style=color:#e6db74>"foo"</span>
|
|
</span></span></code></pre></div><p>TOML v1.1.0ではインラインテーブル内での改行が許可されますが、その場合は
|
|
<code>toml::table_format::multiline_oneline</code> とします。
|
|
これは、後述するTOMLバージョン指定で対応する機能フラグが<code>true</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-toml data-lang=toml><span style=display:flex><span><span style=color:#a6e22e>multiline_oneline</span> = {
|
|
</span></span><span style=display:flex><span> <span style=color:#a6e22e>a</span> = <span style=color:#ae81ff>42</span>,
|
|
</span></span><span style=display:flex><span> <span style=color:#a6e22e>b</span> = <span style=color:#e6db74>"foo"</span>
|
|
</span></span><span style=display:flex><span>}
|
|
</span></span></code></pre></div><p>詳細は、<a href=https://toruniina.github.io/toml11/ja/docs/reference/format/#table_format>reference</a> を参照してください。</p><h2 id=toml言語バージョンを指定して出力する>TOML言語バージョンを指定して出力する
|
|
<a class=anchor href=#toml%e8%a8%80%e8%aa%9e%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%81%a6%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b>#</a></h2><p>TOML v1.1.0で許可されたインラインテーブル内の改行や<code>\x</code>エスケープシーケンスのように、
|
|
TOMLバージョンによって使用できない言語機能があります。</p><p><code>toml::format</code> は最後の引数に <code>toml::spec</code> を取ることができます。</p><p>これにより、シリアライズ時に使用するTOMLのバージョンを指定することができます。</p><p>特に、 <code>toml::parse</code> で <code>toml::spec</code> を使用して新機能を使用した場合は、
|
|
パースした値がそのバージョンでしか使えないフォーマット情報を持つ場合があるので、
|
|
<code>toml::format</code> にも同じ <code>toml::spec</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:#75715e>#include</span> <span style=color:#75715e><toml.hpp></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e>#include</span> <span style=color:#75715e><iostream></span><span style=color:#75715e>
|
|
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>
|
|
</span></span><span style=display:flex><span><span style=color:#66d9ef>int</span> <span style=color:#a6e22e>main</span>()
|
|
</span></span><span style=display:flex><span>{
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>auto</span> spec <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>spec<span style=color:#f92672>::</span>v(<span style=color:#ae81ff>1</span>, <span style=color:#ae81ff>1</span>, <span style=color:#ae81ff>0</span>)
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> toml<span style=color:#f92672>::</span>value v <span style=color:#f92672>=</span> toml<span style=color:#f92672>::</span>parse(<span style=color:#e6db74>"input.toml"</span>, spec);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> std<span style=color:#f92672>::</span>cout <span style=color:#f92672><<</span> toml<span style=color:#f92672>::</span>format(v, spec);
|
|
</span></span><span style=display:flex><span>
|
|
</span></span><span style=display:flex><span> <span style=color:#66d9ef>return</span> <span style=color:#ae81ff>0</span>;
|
|
</span></span><span style=display:flex><span>}
|
|
</span></span></code></pre></div></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=#tomlファイルを出力する>TOMLファイルを出力する</a><ul><li><a href=#キーを渡して出力する>キーを渡して出力する</a></li><li><a href=#フォーマットを指定する>フォーマットを指定する</a><ul><li><a href=#整数のフォーマットを指定する>整数のフォーマットを指定する</a></li><li><a href=#配列を単一行複数行にする>配列を単一行・複数行にする</a></li><li><a href=#テーブルをインラインテーブルにする>テーブルをインラインテーブルにする</a></li></ul></li><li><a href=#toml言語バージョンを指定して出力する>TOML言語バージョンを指定して出力する</a></li></ul></li></ul></nav></div></aside></main></body></html> |