94 lines
2.9 KiB
C++
94 lines
2.9 KiB
C++
|
//
|
||
|
// 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
|
||
|
|