doc: update documentation for FsPathPatch
This commit is contained in:
parent
1c2007928d
commit
ed549592dd
|
@ -2,4 +2,72 @@
|
||||||
|
|
||||||
\page fs_path_patch std::filesystem::path Patch
|
\page fs_path_patch std::filesystem::path Patch
|
||||||
|
|
||||||
|
As you know, the underlying char type of \c std::filesystem::path is \c wchar_t on Windows,
|
||||||
|
and in other platforms, it is simple \c char.
|
||||||
|
Due to this, if you try to create a \c std::filesystem::path instance by calling constructor with an UTF8 char sequence on Windows,
|
||||||
|
the library implementation will assume your input is based on current Windows code page, not UTF8.
|
||||||
|
And the final path stored in \c std::filesystem::path is not what you expcected.
|
||||||
|
|
||||||
|
This patch gives you a way to create \c std::filesystem::path
|
||||||
|
and extract path string stored in \c std::filesystem::path with UTF8 encoding.
|
||||||
|
This patch namespace always use UTF8 as its argument.
|
||||||
|
You should use the functions provided by this namespace on any platforms
|
||||||
|
instead of vanilla \c std::filesystem::path functions.
|
||||||
|
However, if your C++ standard is higher than C++ 20,
|
||||||
|
you can directly use UTF8 string pointer and string container in \c std::filesystem::path,
|
||||||
|
because standard library has supported them.
|
||||||
|
This patch only just want to provide an uniform programming experience.
|
||||||
|
|
||||||
|
This patch is served for Windows but also works on other plaftoms.
|
||||||
|
If you are in Windows, this patch will perform extra operations to achieve goals,
|
||||||
|
and in other platforms, they just redirect request to corresponding vanilla C++ functions.
|
||||||
|
|
||||||
|
\section fs_path_patch__from_utf8_path Create Path from UTF8 String
|
||||||
|
|
||||||
|
YYCC::FsPathPatch::FromUTF8Path provides this feature.
|
||||||
|
It accepts an string pointer to UTF8 string and try to create \c std::filesystem::path from it.
|
||||||
|
Function will throw exception if encoding convertion or constructor self failed.
|
||||||
|
There are some example:
|
||||||
|
|
||||||
|
\code
|
||||||
|
auto foobar_path = YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("/foo/bar"));
|
||||||
|
auto slashed_path = foobar_path / YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("test"));
|
||||||
|
auto replaced_ext = foobar_path.replace_extension(YYCC::FsPathPatch::FromUTF8Path(YYCC_U8(".txt")));
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
For first line in example, it is obvious that you can create a \c std::filesystem::path from this function.
|
||||||
|
However, for the second and third line in example, what we want to tell you is
|
||||||
|
that you should always use this function in other \c std::filesystem::path functions requiring path string.
|
||||||
|
|
||||||
|
\c std::filesystem::path is a very \e conservative class.
|
||||||
|
Most of its functions only accept \c std::filesystem::path self as argument.
|
||||||
|
For example, \c std::filesystem::path::replace_extension do not accept string as argument.
|
||||||
|
It accepts a reference to \c std::filesystem::path as argument.
|
||||||
|
(it still is possible that pass string pointer or string container to it because they can be converted to \c std::filesystem::path implicitly.)
|
||||||
|
It's great. This is what we expected!
|
||||||
|
We now can safely deliver the result generated by our function to these functions,
|
||||||
|
and don't need to worry about the encoding of we provided string.
|
||||||
|
Because all strings have been converted to \c std::filesystem::path by our function before passing them.
|
||||||
|
|
||||||
|
So, the second line will produce \c "/foo/bar/test"
|
||||||
|
and the third line will produce \c "/foo/bar.txt" in any platforms.
|
||||||
|
|
||||||
|
You may notice std::filesystem::u8path.
|
||||||
|
However it is depracted since C++ 20,
|
||||||
|
because \c std::filesystem::path directly supports UTF8 by \c char8_t since C++ 20.
|
||||||
|
Because C++ standard is volatile, we create this function to have an uniform programming experience.
|
||||||
|
|
||||||
|
\section fs_path_patch__to_utf8_path Extract UTF8 Path String from Path
|
||||||
|
|
||||||
|
YYCC::FsPathPatch::ToUTF8Path provides this feature.
|
||||||
|
It basically is the reversed operation of YYCC::FsPathPatch::FromUTF8Path.
|
||||||
|
It is usually used when you have done all path work in \c std::filesystem::path
|
||||||
|
and want to get the result.
|
||||||
|
There is an example:
|
||||||
|
|
||||||
|
\code
|
||||||
|
auto foobar_path = YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("/foo/bar"));
|
||||||
|
auto result = YYCC::FsPathPatch::ToUTF8Path(foobar_path / YYCC::FsPathPatch::FromUTF8Path(YYCC_U8("test")));
|
||||||
|
\endcode
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user