100 lines
3.8 KiB
Markdown
100 lines
3.8 KiB
Markdown
[fs.path.fmtr]
|
||
|
||
# 31 Input/output library [[input.output]](./#input.output)
|
||
|
||
## 31.12 File systems [[filesystems]](filesystems#fs.path.fmtr)
|
||
|
||
### 31.12.6 Class path [[fs.class.path]](fs.class.path#fs.path.fmtr)
|
||
|
||
#### 31.12.6.9 Formatting support [fs.path.fmtr]
|
||
|
||
#### [31.12.6.9.1](#general) Formatting support overview [[fs.path.fmtr.general]](fs.path.fmtr.general)
|
||
|
||
[ð](#lib:formatter)
|
||
|
||
namespace std {template<class charT> struct formatter<filesystem::path, charT> {constexpr void set_debug_format(); constexpr typename basic_format_parse_context<charT>::iterator
|
||
parse(basic_format_parse_context<charT>& ctx); template<class FormatContext>typename FormatContext::iterator
|
||
format(const filesystem::path& path, FormatContext& ctx) const; };}
|
||
|
||
#### [31.12.6.9.2](#funcs) Formatting support functions [[fs.path.fmtr.funcs]](fs.path.fmtr.funcs)
|
||
|
||
[1](#funcs-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15483)
|
||
|
||
Formatting of paths uses formatting specifiers of the form
|
||
|
||
[path-format-spec:](#nt:path-format-spec "31.12.6.9.2 Formatting support functions [fs.path.fmtr.funcs]")
|
||
fill-and-alignopt widthopt ?opt gopt
|
||
|
||
where the productions *fill-and-align* and *width* are described in [[format.string]](format.string "28.5.2 Format string")[.](#funcs-1.sentence-1)
|
||
|
||
If the ? option is used then
|
||
the path is formatted as an escaped string ([[format.string.escaped]](format.string.escaped "28.5.6.5 Formatting escaped characters and strings"))[.](#funcs-1.sentence-2)
|
||
|
||
[ð](#lib:formatter,set_debug_format)
|
||
|
||
`constexpr void set_debug_format();
|
||
`
|
||
|
||
[2](#funcs-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15500)
|
||
|
||
*Effects*: Modifies the state of the formatter to be as if
|
||
the *path-format-spec* parsed by the last call to parse contained the ? option[.](#funcs-2.sentence-1)
|
||
|
||
[ð](#lib:formatter,basic_format_parse_context)
|
||
|
||
`constexpr typename basic_format_parse_context<charT>::iterator
|
||
parse(basic_format_parse_context<charT>& ctx);
|
||
`
|
||
|
||
[3](#funcs-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15514)
|
||
|
||
*Effects*: Parses the format specifier as a *path-format-spec* and
|
||
stores the parsed specifiers in *this[.](#funcs-3.sentence-1)
|
||
|
||
[4](#funcs-4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15519)
|
||
|
||
*Returns*: An iterator past the end of the *path-format-spec*[.](#funcs-4.sentence-1)
|
||
|
||
[ð](#lib:formatter,format)
|
||
|
||
`template<class FormatContext>
|
||
typename FormatContext::iterator
|
||
format(const filesystem::path& p, FormatContext& ctx) const;
|
||
`
|
||
|
||
[5](#funcs-5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15532)
|
||
|
||
*Effects*: Let s be p.generic_string<filesystem::path::value_type>() if the g option is used,
|
||
otherwise p.native()[.](#funcs-5.sentence-1)
|
||
|
||
Writes s into ctx.out(),
|
||
adjusted according to the *path-format-spec*[.](#funcs-5.sentence-2)
|
||
|
||
If charT is char,path::value_type is wchar_t, and
|
||
the literal encoding is UTF-8,
|
||
then the escaped path is transcoded from the native encoding for
|
||
wide character strings to UTF-8 with
|
||
maximal subparts of ill-formed subsequences
|
||
substituted with U+fffd replacement character per the Unicode Standard, Chapter 3.9 U+fffd Substitution in Conversion[.](#funcs-5.sentence-3)
|
||
|
||
If charT and path::value_type are the same
|
||
then no transcoding is performed[.](#funcs-5.sentence-4)
|
||
|
||
Otherwise, transcoding isimplementation-defined[.](#funcs-5.sentence-5)
|
||
|
||
[6](#funcs-6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15552)
|
||
|
||
*Returns*: An iterator past the end of the output range[.](#funcs-6.sentence-1)
|