Skip to content

Commit

Permalink
Merge pull request #5 from nickelpro/dev
Browse files Browse the repository at this point in the history
🛠 Better fix for wchar encoding detection
  • Loading branch information
ThePhD committed Mar 28, 2022
2 parents b983353 + 3da0e3e commit f56faa9
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 7 deletions.
31 changes: 31 additions & 0 deletions include/ztd/idk/encoding_name.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,37 @@ namespace ztd {
}
}

inline constexpr __encoding_id __to_normalized_unicode_encoding_id(::std::string_view __name) {
if (::ztd::is_encoding_name_equal(__name, "UTF-8")) {
return __encoding_id::__utf8;
}
else if (::ztd::is_encoding_name_equal(__name, "UTF-16")
|| ::ztd::is_encoding_name_equal(__name, "UCS-2-INTERNAL")
|| ::ztd::is_encoding_name_equal(__name, "UCS-2")
|| ::ztd::is_encoding_name_equal(__name, "UTF-16LE")
|| ::ztd::is_encoding_name_equal(__name, "UCS-2LE-INTERNAL")
|| ::ztd::is_encoding_name_equal(__name, "UCS-2LE")
|| ::ztd::is_encoding_name_equal(__name, "UTF-16BE")
|| ::ztd::is_encoding_name_equal(__name, "UCS-2BE-INTERNAL")
|| ::ztd::is_encoding_name_equal(__name, "UCS-2BE")) {
return __encoding_id::__utf16;
}
else if (::ztd::is_encoding_name_equal(__name, "UTF-32")
|| ::ztd::is_encoding_name_equal(__name, "UCS-4-INTERNAL")
|| ::ztd::is_encoding_name_equal(__name, "UCS-4")
|| ::ztd::is_encoding_name_equal(__name, "UTF-32LE")
|| ::ztd::is_encoding_name_equal(__name, "UCS-4LE-INTERNAL")
|| ::ztd::is_encoding_name_equal(__name, "UCS-4LE")
|| ::ztd::is_encoding_name_equal(__name, "UTF-32BE")
|| ::ztd::is_encoding_name_equal(__name, "UCS-4BE-INTERNAL")
|| ::ztd::is_encoding_name_equal(__name, "UCS-4BE")) {
return __encoding_id::__utf32;
}
else {
return __encoding_id::__unknown;
}
}

inline constexpr bool __is_unicode_encoding_id(__encoding_id __id) noexcept {
switch (__id) {
case __encoding_id::__utf7:
Expand Down
13 changes: 6 additions & 7 deletions include/ztd/tests/basic_unicode_strings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,12 @@

namespace ztd { namespace tests {

inline constexpr bool wide_is_utf32
= ::ztd::is_encoding_name_equal(ZTD_CXX_COMPILE_TIME_WIDE_ENCODING_NAME_GET_I_(), "UTF-32")
|| ::ztd::is_encoding_name_equal(ZTD_CXX_COMPILE_TIME_WIDE_ENCODING_NAME_GET_I_(), "UTF-32LE");
inline constexpr bool wide_is_utf16
= ::ztd::is_encoding_name_equal(ZTD_CXX_COMPILE_TIME_WIDE_ENCODING_NAME_GET_I_(), "UTF-16");
inline constexpr bool wide_is_utf8
= ::ztd::is_encoding_name_equal(ZTD_CXX_COMPILE_TIME_WIDE_ENCODING_NAME_GET_I_(), "UTF-8");
inline constexpr ::ztd::__idk_detail::__encoding_id wide_enocding
= ::ztd::__idk_detail::__to_normalized_unicode_encoding_idl(ZTD_CXX_COMPILE_TIME_WIDE_ENCODING_NAME_GET_I_());

inline constexpr bool wide_is_utf32 = wide_enocding == ::ztd::__idk_detail::__encoding_id::__utf32;
inline constexpr bool wide_is_utf16 = wide_enocding == ::ztd::__idk_detail::__encoding_id::__utf16;
inline constexpr bool wide_is_utf8 = wide_enocding == ::ztd::__idk_detail::__encoding_id::__utf8;

template <typename Container>
inline ::ztd::span<const std::byte> range_to_bytes(Container& c) {
Expand Down

0 comments on commit f56faa9

Please sign in to comment.