Chris@16: // Chris@16: // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: #ifndef BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED Chris@16: #define BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #ifdef BOOST_MSVC Chris@16: # pragma warning(push) Chris@16: # pragma warning(disable : 4275 4251 4231 4660) Chris@16: #endif Chris@16: Chris@16: Chris@16: Chris@16: namespace boost { Chris@16: namespace locale { Chris@16: namespace conv { Chris@16: /// Chris@16: /// \addtogroup codepage Chris@16: /// Chris@16: /// @{ Chris@16: Chris@16: /// Chris@16: /// Convert a Unicode text in range [begin,end) to other Unicode encoding Chris@16: /// Chris@16: template Chris@16: std::basic_string Chris@16: utf_to_utf(CharIn const *begin,CharIn const *end,method_type how = default_method) Chris@16: { Chris@16: std::basic_string result; Chris@16: result.reserve(end-begin); Chris@16: typedef std::back_insert_iterator > inserter_type; Chris@16: inserter_type inserter(result); Chris@16: utf::code_point c; Chris@16: while(begin!=end) { Chris@16: c=utf::utf_traits::template decode(begin,end); Chris@16: if(c==utf::illegal || c==utf::incomplete) { Chris@16: if(how==stop) Chris@16: throw conversion_error(); Chris@16: } Chris@16: else { Chris@16: utf::utf_traits::template encode(c,inserter); Chris@16: } Chris@16: } Chris@16: return result; Chris@16: } Chris@16: Chris@16: /// Chris@16: /// Convert a Unicode NUL terminated string \a str other Unicode encoding Chris@16: /// Chris@16: template Chris@16: std::basic_string Chris@16: utf_to_utf(CharIn const *str,method_type how = default_method) Chris@16: { Chris@16: CharIn const *end = str; Chris@16: while(*end) Chris@16: end++; Chris@16: return utf_to_utf(str,end,how); Chris@16: } Chris@16: Chris@16: Chris@16: /// Chris@16: /// Convert a Unicode string \a str other Unicode encoding Chris@16: /// Chris@16: template Chris@16: std::basic_string Chris@16: utf_to_utf(std::basic_string const &str,method_type how = default_method) Chris@16: { Chris@16: return utf_to_utf(str.c_str(),str.c_str()+str.size(),how); Chris@16: } Chris@16: Chris@16: Chris@16: /// @} Chris@16: Chris@16: } // conv Chris@16: Chris@16: } // locale Chris@16: } // boost Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: #endif Chris@16: Chris@16: // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 Chris@16: