// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // Copyright (c) 2020 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE or copy at // http://www.boost.org/LICENSE_1_0.txt) // #ifndef BOOST_NOWIDE_CONVERT_HPP_INCLUDED #define BOOST_NOWIDE_CONVERT_HPP_INCLUDED #include #include #include namespace boost { namespace nowide { /// /// Convert wide string (UTF-16/32) in range [begin,end) to NULL terminated narrow string (UTF-8) /// stored in \a output of size \a output_size (including NULL) /// /// If there is not enough room NULL is returned, else output is returned. /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// inline char* narrow(char* output, size_t output_size, const wchar_t* begin, const wchar_t* end) { return utf::convert_buffer(output, output_size, begin, end); } /// /// Convert NULL terminated wide string (UTF-16/32) to NULL terminated narrow string (UTF-8) /// stored in \a output of size \a output_size (including NULL) /// /// If there is not enough room NULL is returned, else output is returned. /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// inline char* narrow(char* output, size_t output_size, const wchar_t* source) { return narrow(output, output_size, source, source + utf::strlen(source)); } /// /// Convert narrow string (UTF-8) in range [begin,end) to NULL terminated wide string (UTF-16/32) /// stored in \a output of size \a output_size (including NULL) /// /// If there is not enough room NULL is returned, else output is returned. /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// inline wchar_t* widen(wchar_t* output, size_t output_size, const char* begin, const char* end) { return utf::convert_buffer(output, output_size, begin, end); } /// /// Convert NULL terminated narrow string (UTF-8) to NULL terminated wide string (UTF-16/32) /// most output_size (including NULL) /// /// If there is not enough room NULL is returned, else output is returned. /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// inline wchar_t* widen(wchar_t* output, size_t output_size, const char* source) { return widen(output, output_size, source, source + utf::strlen(source)); } /// /// Convert wide string (UTF-16/32) to narrow string (UTF-8). /// /// \param s Input string /// \param count Number of characters to convert /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// template> inline std::string narrow(const T_Char* s, size_t count) { return utf::convert_string(s, s + count); } /// /// Convert wide string (UTF-16/32) to narrow string (UTF-8). /// /// \param s NULL terminated input string /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// template> inline std::string narrow(const T_Char* s) { return narrow(s, utf::strlen(s)); } /// /// Convert wide string (UTF-16/32) to narrow string (UTF-8). /// /// \param s Input string /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// template> inline std::string narrow(const StringOrStringView& s) { return utf::convert_string(s.data(), s.data() + s.size()); } /// /// Convert narrow string (UTF-8) to wide string (UTF-16/32). /// /// \param s Input string /// \param count Number of characters to convert /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// template> inline std::wstring widen(const T_Char* s, size_t count) { return utf::convert_string(s, s + count); } /// /// Convert narrow string (UTF-8) to wide string (UTF-16/32). /// /// \param s NULL terminated input string /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// template> inline std::wstring widen(const T_Char* s) { return widen(s, utf::strlen(s)); } /// /// Convert narrow string (UTF-8) to wide string (UTF-16/32). /// /// \param s Input string /// Any illegal sequences are replaced with the replacement character, see #BOOST_NOWIDE_REPLACEMENT_CHARACTER /// template> inline std::wstring widen(const StringOrStringView& s) { return utf::convert_string(s.data(), s.data() + s.size()); } } // namespace nowide } // namespace boost #endif