00001
00002
00003
00004
00005
00006
00007
00008 #ifndef BOOSTER_LOCALE_ENCODING_H_INCLUDED
00009 #define BOOSTER_LOCALE_ENCODING_H_INCLUDED
00010
00011 #include <booster/config.h>
00012 #ifdef BOOSTER_MSVC
00013 # pragma warning(push)
00014 # pragma warning(disable : 4275 4251 4231 4660)
00015 #endif
00016 #include <booster/locale/info.h>
00017 #include <booster/locale/encoding_errors.h>
00018 #include <booster/locale/encoding_utf.h>
00019
00020
00021
00022 namespace booster {
00023 namespace locale {
00024
00028 namespace conv {
00033
00037 template<typename CharType>
00038 std::basic_string<CharType> to_utf(char const *begin,char const *end,std::string const &charset,method_type how=default_method);
00039
00043 template<typename CharType>
00044 std::string from_utf(CharType const *begin,CharType const *end,std::string const &charset,method_type how=default_method);
00045
00051 template<typename CharType>
00052 std::basic_string<CharType> to_utf(char const *begin,char const *end,std::locale const &loc,method_type how=default_method)
00053 {
00054 return to_utf<CharType>(begin,end,std::use_facet<info>(loc).encoding(),how);
00055 }
00056
00062 template<typename CharType>
00063 std::string from_utf(CharType const *begin,CharType const *end,std::locale const &loc,method_type how=default_method)
00064 {
00065 return from_utf(begin,end,std::use_facet<info>(loc).encoding(),how);
00066 }
00067
00071
00072 template<typename CharType>
00073 std::basic_string<CharType> to_utf(std::string const &text,std::string const &charset,method_type how=default_method)
00074 {
00075 return to_utf<CharType>(text.c_str(),text.c_str()+text.size(),charset,how);
00076 }
00077
00081 template<typename CharType>
00082 std::string from_utf(std::basic_string<CharType> const &text,std::string const &charset,method_type how=default_method)
00083 {
00084 return from_utf(text.c_str(),text.c_str()+text.size(),charset,how);
00085 }
00086
00090 template<typename CharType>
00091 std::basic_string<CharType> to_utf(char const *text,std::string const &charset,method_type how=default_method)
00092 {
00093 char const *text_end = text;
00094 while(*text_end)
00095 text_end++;
00096 return to_utf<CharType>(text,text_end,charset,how);
00097 }
00098
00102 template<typename CharType>
00103 std::string from_utf(CharType const *text,std::string const &charset,method_type how=default_method)
00104 {
00105 CharType const *text_end = text;
00106 while(*text_end)
00107 text_end++;
00108 return from_utf(text,text_end,charset,how);
00109 }
00110
00116 template<typename CharType>
00117 std::basic_string<CharType> to_utf(std::string const &text,std::locale const &loc,method_type how=default_method)
00118 {
00119 return to_utf<CharType>(text.c_str(),text.c_str()+text.size(),loc,how);
00120 }
00121
00127 template<typename CharType>
00128 std::string from_utf(std::basic_string<CharType> const &text,std::locale const &loc,method_type how=default_method)
00129 {
00130 return from_utf(text.c_str(),text.c_str()+text.size(),loc,how);
00131 }
00132
00138 template<typename CharType>
00139 std::basic_string<CharType> to_utf(char const *text,std::locale const &loc,method_type how=default_method)
00140 {
00141 char const *text_end = text;
00142 while(*text_end)
00143 text_end++;
00144 return to_utf<CharType>(text,text_end,loc,how);
00145 }
00146
00152 template<typename CharType>
00153 std::string from_utf(CharType const *text,std::locale const &loc,method_type how=default_method)
00154 {
00155 CharType const *text_end = text;
00156 while(*text_end)
00157 text_end++;
00158 return from_utf(text,text_end,loc,how);
00159 }
00160
00161
00165
00166 BOOSTER_API
00167 std::string between(char const *begin,
00168 char const *end,
00169 std::string const &to_encoding,
00170 std::string const &from_encoding,
00171 method_type how=default_method);
00172
00176
00177 inline
00178 std::string between(char const *text,
00179 std::string const &to_encoding,
00180 std::string const &from_encoding,
00181 method_type how=default_method)
00182 {
00183 char const *end=text;
00184 while(*end)
00185 end++;
00186 return booster::locale::conv::between(text,end,to_encoding,from_encoding,how);
00187 }
00188
00192 inline
00193 std::string between(std::string const &text,
00194 std::string const &to_encoding,
00195 std::string const &from_encoding,
00196 method_type how=default_method)
00197 {
00198 return booster::locale::conv::between(text.c_str(),text.c_str()+text.size(),to_encoding,from_encoding,how);
00199 }
00200
00202
00203 template<>
00204 BOOSTER_API std::basic_string<char> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
00205
00206 template<>
00207 BOOSTER_API std::string from_utf(char const *begin,char const *end,std::string const &charset,method_type how);
00208
00209 template<>
00210 BOOSTER_API std::basic_string<wchar_t> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
00211
00212 template<>
00213 BOOSTER_API std::string from_utf(wchar_t const *begin,wchar_t const *end,std::string const &charset,method_type how);
00214
00215 #ifdef BOOSTER_HAS_CHAR16_T
00216 template<>
00217 BOOSTER_API std::basic_string<char16_t> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
00218
00219 template<>
00220 BOOSTER_API std::string from_utf(char16_t const *begin,char16_t const *end,std::string const &charset,method_type how);
00221 #endif
00222
00223 #ifdef BOOSTER_HAS_CHAR32_T
00224 template<>
00225 BOOSTER_API std::basic_string<char32_t> to_utf(char const *begin,char const *end,std::string const &charset,method_type how);
00226
00227 template<>
00228 BOOSTER_API std::string from_utf(char32_t const *begin,char32_t const *end,std::string const &charset,method_type how);
00229 #endif
00230
00231
00233
00234 }
00235
00236 }
00237 }
00238
00239 #ifdef BOOSTER_MSVC
00240 #pragma warning(pop)
00241 #endif
00242
00243 #endif
00244
00245
00246