You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
93 lines
2.8 KiB
93 lines
2.8 KiB
// |
|
// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) |
|
// |
|
// Distributed under the Boost Software License, Version 1.0. (See |
|
// accompanying file LICENSE_1_0.txt or copy at |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
// |
|
#ifndef BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED |
|
#define BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED |
|
|
|
#include <boost/locale/utf.hpp> |
|
#include <boost/locale/encoding_errors.hpp> |
|
#include <iterator> |
|
#ifdef BOOST_MSVC |
|
# pragma warning(push) |
|
# pragma warning(disable : 4275 4251 4231 4660) |
|
#endif |
|
|
|
|
|
|
|
namespace boost { |
|
namespace locale { |
|
namespace conv { |
|
/// |
|
/// \addtogroup codepage |
|
/// |
|
/// @{ |
|
|
|
/// |
|
/// Convert a Unicode text in range [begin,end) to other Unicode encoding |
|
/// |
|
template<typename CharOut,typename CharIn> |
|
std::basic_string<CharOut> |
|
utf_to_utf(CharIn const *begin,CharIn const *end,method_type how = default_method) |
|
{ |
|
std::basic_string<CharOut> result; |
|
result.reserve(end-begin); |
|
typedef std::back_insert_iterator<std::basic_string<CharOut> > inserter_type; |
|
inserter_type inserter(result); |
|
utf::code_point c; |
|
while(begin!=end) { |
|
c=utf::utf_traits<CharIn>::template decode<CharIn const *>(begin,end); |
|
if(c==utf::illegal || c==utf::incomplete) { |
|
if(how==stop) |
|
throw conversion_error(); |
|
} |
|
else { |
|
utf::utf_traits<CharOut>::template encode<inserter_type>(c,inserter); |
|
} |
|
} |
|
return result; |
|
} |
|
|
|
/// |
|
/// Convert a Unicode NUL terminated string \a str other Unicode encoding |
|
/// |
|
template<typename CharOut,typename CharIn> |
|
std::basic_string<CharOut> |
|
utf_to_utf(CharIn const *str,method_type how = default_method) |
|
{ |
|
CharIn const *end = str; |
|
while(*end) |
|
end++; |
|
return utf_to_utf<CharOut,CharIn>(str,end,how); |
|
} |
|
|
|
|
|
/// |
|
/// Convert a Unicode string \a str other Unicode encoding |
|
/// |
|
template<typename CharOut,typename CharIn> |
|
std::basic_string<CharOut> |
|
utf_to_utf(std::basic_string<CharIn> const &str,method_type how = default_method) |
|
{ |
|
return utf_to_utf<CharOut,CharIn>(str.c_str(),str.c_str()+str.size(),how); |
|
} |
|
|
|
|
|
/// @} |
|
|
|
} // conv |
|
|
|
} // locale |
|
} // boost |
|
|
|
#ifdef BOOST_MSVC |
|
#pragma warning(pop) |
|
#endif |
|
|
|
#endif |
|
|
|
// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 |
|
|
|
|