encoding_utf.h
//
// 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 BOOSTER_LOCALE_ENCODING_UTF_H_INCLUDED
#define BOOSTER_LOCALE_ENCODING_UTF_H_INCLUDED
#include <booster/locale/utf.h>
#include <booster/locale/encoding_errors.h>
#include <iterator>
#ifdef BOOSTER_MSVC
# pragma warning(push)
# pragma warning(disable : 4275 4251 4231 4660)
#endif
namespace booster {
namespace locale {
namespace conv {
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;
}
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);
}
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 BOOSTER_MSVC
#pragma warning(pop)
#endif
#endif
// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
booster::locale::utf::utf_traits
Definition: utf.h:140
booster::locale::utf::code_point
uint32_t code_point
The integral type type that can hold a Unicode code point.
Definition: utf.h:34
booster::locale::conv::default_method
Default method - skip.
Definition: encoding_errors.h:57
booster::locale::conv::conversion_error
The excepton that is thrown in case of conversion error.
Definition: encoding_errors.h:31
booster::locale::conv::method_type
method_type
Definition: encoding_errors.h:54
booster::locale::conv::stop
Stop conversion and throw conversion_error.
Definition: encoding_errors.h:56
booster::locale::conv::utf_to_utf
std::basic_string< CharOut > utf_to_utf(std::basic_string< CharIn > const &str, method_type how=default_method)
Definition: encoding_utf.h:73