59 lines
2.1 KiB
C++
59 lines
2.1 KiB
C++
//
|
|
// Copyright (c) 2022-2023 Alexander Grund
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0.
|
|
// https://www.boost.org/LICENSE_1_0.txt
|
|
|
|
#ifndef BOOST_LOCALE_DETAIL_ENCODING_HPP_INCLUDED
|
|
#define BOOST_LOCALE_DETAIL_ENCODING_HPP_INCLUDED
|
|
|
|
#include <boost/locale/config.hpp>
|
|
#include <boost/locale/encoding_errors.hpp>
|
|
#include <boost/utility/string_view.hpp>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
/// \cond INTERNAL
|
|
namespace boost { namespace locale { namespace conv { namespace detail {
|
|
template<typename CharIn, typename CharOut>
|
|
class BOOST_SYMBOL_VISIBLE charset_converter {
|
|
public:
|
|
using char_out_type = CharOut;
|
|
using char_in_type = CharIn;
|
|
using string_type = std::basic_string<CharOut>;
|
|
|
|
virtual ~charset_converter() = default;
|
|
virtual string_type convert(const CharIn* begin, const CharIn* end) = 0;
|
|
string_type convert(const boost::basic_string_view<CharIn>& text)
|
|
{
|
|
return convert(text.data(), text.data() + text.length());
|
|
}
|
|
};
|
|
|
|
using narrow_converter = charset_converter<char, char>;
|
|
|
|
template<typename CharType>
|
|
using utf_encoder = charset_converter<char, CharType>;
|
|
|
|
template<typename CharType>
|
|
using utf_decoder = charset_converter<CharType, char>;
|
|
|
|
enum class conv_backend { Default, IConv, ICU, WinAPI };
|
|
|
|
template<typename Char>
|
|
BOOST_LOCALE_DECL std::unique_ptr<utf_encoder<Char>>
|
|
make_utf_encoder(const std::string& charset, method_type how, conv_backend impl = conv_backend::Default);
|
|
template<typename Char>
|
|
BOOST_LOCALE_DECL std::unique_ptr<utf_decoder<Char>>
|
|
make_utf_decoder(const std::string& charset, method_type how, conv_backend impl = conv_backend::Default);
|
|
BOOST_LOCALE_DECL std::unique_ptr<narrow_converter>
|
|
make_narrow_converter(const std::string& src_encoding,
|
|
const std::string& target_encoding,
|
|
method_type how,
|
|
conv_backend impl = conv_backend::Default);
|
|
}}}} // namespace boost::locale::conv::detail
|
|
|
|
/// \endcond
|
|
|
|
#endif
|