doc: update comments of code.

- add lost testbench for wchar encoding convertion.
- update code documentation.
This commit is contained in:
2024-06-18 16:03:41 +08:00
parent 77b6f439f7
commit f153f9bc22
6 changed files with 92 additions and 22 deletions

View File

@ -12,16 +12,16 @@
/**
* @brief COM fucntions related namespace.
* @details
* This namespace is Windows specific and it will disappear on other platforms.
* This namespace is Windows specific and is unavailable on other platforms.
*
* This namespace contain a COM Guard which make sure COM was initialized in current module when loading current module.
* It is essential because all calling to COM functions should be under the premise that COM has been initialized.
* This guard also will uninitialize COM when unloading this module.
*
* This namespace also provided various memory-safe types for interacting with COM functions.
* Although Microsoft also has similar smart pointer called CComPtr.
* Although Microsoft also has similar smart pointer called \c CComPtr.
* But this library is eager to hide all Microsoft-related functions calling.
* Using CComPtr is not corresponding with the philosophy of this library.
* Using \c CComPtr is not corresponding with the philosophy of this library.
* So these std-based smart pointer type were created.
*
* This namespace is used by internal functions as intended.

View File

@ -71,7 +71,7 @@ namespace YYCC::EncodingHelper {
#endif
template<typename _TChar, std::enable_if_t<std::is_same_v<_TChar, char16_t> || std::is_same_v<_TChar, char32_t>, int> = 0>
bool UTF8ToUTFOther(const char* src, std::basic_string<_TChar>& dest) {
static bool UTF8ToUTFOther(const char* src, std::basic_string<_TChar>& dest) {
// Reference:
// https://zh.cppreference.com/w/cpp/string/multibyte/mbrtoc32
// https://zh.cppreference.com/w/cpp/string/multibyte/mbrtoc16
@ -146,7 +146,7 @@ namespace YYCC::EncodingHelper {
}
template<typename _TChar, std::enable_if_t<std::is_same_v<_TChar, char16_t> || std::is_same_v<_TChar, char32_t>, int> = 0>
bool UTFOtherToUTF8(const _TChar* src, std::string& dest) {
static bool UTFOtherToUTF8(const _TChar* src, std::string& dest) {
// Reference:
// https://zh.cppreference.com/w/cpp/string/multibyte/c32rtomb
// https://zh.cppreference.com/w/cpp/string/multibyte/c16rtomb

View File

@ -9,6 +9,45 @@
#include "WinImportSuffix.hpp"
#endif
/**
* @brief The namespace handling encoding issues.
* @details
* \par Windows Encoding Convertion
* This namespace provides the convertion between wchar_t, UTF8 and code-page-based string:
* The function name has following format: \c AAAToBBB.
* AAA is the source string and BBB is target string.
* AAA and BBB has following possible value:
* \li \c Char: Code-page-based string. Usually it will add a code page parameter for function to get the code page of this string. For code page, please see Microsoft document.
* \li \c UTF8: UTF8 string.
* \li \c Wchar: wchar_t string.
* \par
* For example: \c WcharToUTF8 will perform the convertion from wchar_t to UTF8,
* and \c CharToChar will perform the convertion between 2 code-page-based string and caller can specify individual code page for these 2 string.
* \par
* These functions are Windows specific and are unavailable on other platforms.
* Becasue Windows use wchar_t string as its function arguments for globalization, and this library use UTF8 everywhere.
* So it should have a bidirectional way to do convertion between wchar_t string and UTF8 string.
*
* \par UTF32, UTF16 and UTF8 Convertion
* This namespace also provide the convertion among UTF32, UTF16 and UTF8.
* These convertion functions are suit for all platforms, not Windows oriented.
* \par
* Due to implementation, this library assume all non-Windows system use UTF8 as their C locale.
* Otherwise these functions will produce wrong result.
*
* \par Function Parameters
* We provide these encoding convertion functions with following 2 types:
* \li Function returns \c bool and its parameter order source string pointer and a corresponding \c std::basic_string container for receiving result.
* \li Function returns corresponding \c std::basic_string result, and its parameter only order source string pointer.
* \par
* For these 2 declarations, both of them will not throw any exception and do not accept nullptr as source string.
* The only difference is that the way to indicate convertion error.
* \par
* First declaration will return false to indicate there is an error when doing convertion. Please note that the content of string container passing in may still be changed!
* Last declaration will return empty string to indicate error. Please note if you pass empty string in, they still will output empty string but it doesn't mean an error.
* So last declaration is used in the scenario that we don't care whether the convertion success did. For example, output something to console.
*
*/
namespace YYCC::EncodingHelper {
#if YYCC_OS == YYCC_OS_WINDOWS

View File

@ -2,6 +2,16 @@
#include "YYCCInternal.hpp"
#if YYCC_OS == YYCC_OS_WINDOWS
/**
* @brief Windows specific unhandled exception processor.
* @details
* This namespace is Windows specific. On other platforms, the whole namespace is unavailable.
*
* This namespace allow user register unhandled exception handler on Windows
* to output error log into \c stderr and log file, and generate coredump if possible.
* This is useful for bug tracing on Windows, especially most Windows user are naive and don't know how to report bug.
*
*/
namespace YYCC::ExceptionHelper {
/**
@ -15,7 +25,6 @@ namespace YYCC::ExceptionHelper {
* in temp folder (for convenient debugging of developer when reporting bugs) if it can.
*
* This function usually is called at the start of program.
* @remarks This function is Windows only.
*/
void Register();
/**
@ -27,7 +36,6 @@ namespace YYCC::ExceptionHelper {
* You must call this function if you have called Register() before.
*
* This function usually is called at the end of program.
* @remarks This function is Windows only.
*/
void Unregister();

View File

@ -12,8 +12,7 @@
* @brief The helper providing assistance to Win32 functions.
* @details
* This helper is Windows specific.
* If current environment is not Windows,
* the whole namespace will disappear.
* If current environment is not Windows, the whole namespace will be unavailable.
*/
namespace YYCC::WinFctHelper {