diff options
Diffstat (limited to 'src/FbTk/FbString.cc')
-rw-r--r-- | src/FbTk/FbString.cc | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/src/FbTk/FbString.cc b/src/FbTk/FbString.cc index ff4d27a..c767a30 100644 --- a/src/FbTk/FbString.cc +++ b/src/FbTk/FbString.cc | |||
@@ -40,7 +40,13 @@ | |||
40 | #include <locale.h> | 40 | #include <locale.h> |
41 | 41 | ||
42 | #include <iostream> | 42 | #include <iostream> |
43 | using namespace std; | 43 | |
44 | using std::string; | ||
45 | |||
46 | #ifdef DEBUG | ||
47 | using std::cerr; | ||
48 | using std::endl; | ||
49 | #endif // DEBUG | ||
44 | 50 | ||
45 | namespace FbTk { | 51 | namespace FbTk { |
46 | 52 | ||
@@ -54,7 +60,7 @@ static iconv_t *iconv_convs = 0; | |||
54 | static int iconv_convs[CONVSIZE]; | 60 | static int iconv_convs[CONVSIZE]; |
55 | #endif // HAVE_ICONV | 61 | #endif // HAVE_ICONV |
56 | 62 | ||
57 | static std::string locale_codeset; | 63 | static string locale_codeset; |
58 | 64 | ||
59 | /// Initialise all of the iconv conversion descriptors | 65 | /// Initialise all of the iconv conversion descriptors |
60 | void init() { | 66 | void init() { |
@@ -70,9 +76,9 @@ void init() { | |||
70 | locale_codeset = nl_langinfo(CODESET); | 76 | locale_codeset = nl_langinfo(CODESET); |
71 | #else // openbsd doesnt have this (yet?) | 77 | #else // openbsd doesnt have this (yet?) |
72 | locale_codeset = ""; | 78 | locale_codeset = ""; |
73 | std::string locale = setlocale(LC_CTYPE, NULL); | 79 | string locale = setlocale(LC_CTYPE, NULL); |
74 | size_t pos = locale.find('.'); | 80 | size_t pos = locale.find('.'); |
75 | if (pos != std::string::npos) | 81 | if (pos != string::npos) |
76 | locale_codeset = locale.substr(pos); | 82 | locale_codeset = locale.substr(pos); |
77 | #endif // CODESET | 83 | #endif // CODESET |
78 | 84 | ||
@@ -85,7 +91,7 @@ void init() { | |||
85 | iconv_convs[FB2LOCALE] = iconv_open(locale_codeset.c_str(), "UTF-8"); | 91 | iconv_convs[FB2LOCALE] = iconv_open(locale_codeset.c_str(), "UTF-8"); |
86 | iconv_convs[LOCALE2FB] = iconv_open("UTF-8", locale_codeset.c_str()); | 92 | iconv_convs[LOCALE2FB] = iconv_open("UTF-8", locale_codeset.c_str()); |
87 | #else | 93 | #else |
88 | for (int i=0; i < CONVSIZE; ++i) | 94 | for (int i=0; i < CONVSIZE; ++i) |
89 | iconv_convs[i] = 0; | 95 | iconv_convs[i] = 0; |
90 | #endif // HAVE_ICONV | 96 | #endif // HAVE_ICONV |
91 | 97 | ||
@@ -96,7 +102,7 @@ void shutdown() { | |||
96 | if (iconv_convs == 0) | 102 | if (iconv_convs == 0) |
97 | return; | 103 | return; |
98 | 104 | ||
99 | for (int i=0; i < CONVSIZE; ++i) | 105 | for (int i=0; i < CONVSIZE; ++i) |
100 | if (iconv_convs[i] != (iconv_t)(-1)) | 106 | if (iconv_convs[i] != (iconv_t)(-1)) |
101 | iconv_close(iconv_convs[i]); | 107 | iconv_close(iconv_convs[i]); |
102 | 108 | ||
@@ -118,18 +124,18 @@ void shutdown() { | |||
118 | @return the recoded string, or 0 on failure | 124 | @return the recoded string, or 0 on failure |
119 | */ | 125 | */ |
120 | 126 | ||
121 | /** | 127 | /** |
122 | --NOTE-- | 128 | --NOTE-- |
123 | In the "C" locale, this will strip any high-bit characters | 129 | In the "C" locale, this will strip any high-bit characters |
124 | because C means 7-bit ASCII charset. If you don't want this | 130 | because C means 7-bit ASCII charset. If you don't want this |
125 | then you need to set your locale to something UTF-8, OR something | 131 | then you need to set your locale to something UTF-8, OR something |
126 | ISO8859-1. | 132 | ISO8859-1. |
127 | */ | 133 | */ |
128 | std::string recode(iconv_t cd, | 134 | string recode(iconv_t cd, |
129 | const std::string &in) { | 135 | const string &in) { |
130 | 136 | ||
131 | // If empty message, yes this can happen, return | 137 | // If empty message, yes this can happen, return |
132 | if (in.empty()) | 138 | if (in.empty()) |
133 | return ""; | 139 | return ""; |
134 | 140 | ||
135 | if (cd == ((iconv_t)(-1))) | 141 | if (cd == ((iconv_t)(-1))) |
@@ -183,7 +189,7 @@ std::string recode(iconv_t cd, | |||
183 | } | 189 | } |
184 | 190 | ||
185 | // copy to our return string | 191 | // copy to our return string |
186 | std::string ret; | 192 | string ret; |
187 | ret.append(out, outsize - outbytesleft); | 193 | ret.append(out, outsize - outbytesleft); |
188 | 194 | ||
189 | // reset the conversion descriptor | 195 | // reset the conversion descriptor |
@@ -195,27 +201,27 @@ std::string recode(iconv_t cd, | |||
195 | return ret; | 201 | return ret; |
196 | } | 202 | } |
197 | #else | 203 | #else |
198 | std::string recode(int cd, | 204 | string recode(int cd, |
199 | const std::string &str) { | 205 | const string &str) { |
200 | return str; | 206 | return str; |
201 | } | 207 | } |
202 | #endif // HAVE_ICONV | 208 | #endif // HAVE_ICONV |
203 | 209 | ||
204 | FbString XStrToFb(const std::string &src) { | 210 | FbString XStrToFb(const string &src) { |
205 | return recode(iconv_convs[X2FB], src); | 211 | return recode(iconv_convs[X2FB], src); |
206 | } | 212 | } |
207 | 213 | ||
208 | std::string FbStrToX(const FbString &src) { | 214 | string FbStrToX(const FbString &src) { |
209 | return recode(iconv_convs[FB2X], src); | 215 | return recode(iconv_convs[FB2X], src); |
210 | } | 216 | } |
211 | 217 | ||
212 | 218 | ||
213 | /// Handle thislocale string encodings (strings coming from userspace) | 219 | /// Handle thislocale string encodings (strings coming from userspace) |
214 | FbString LocaleStrToFb(const std::string &src) { | 220 | FbString LocaleStrToFb(const string &src) { |
215 | return recode(iconv_convs[LOCALE2FB], src); | 221 | return recode(iconv_convs[LOCALE2FB], src); |
216 | } | 222 | } |
217 | 223 | ||
218 | std::string FbStrToLocale(const FbString &src) { | 224 | string FbStrToLocale(const FbString &src) { |
219 | return recode(iconv_convs[FB2LOCALE], src); | 225 | return recode(iconv_convs[FB2LOCALE], src); |
220 | } | 226 | } |
221 | 227 | ||
@@ -231,7 +237,7 @@ bool haveUTF8() { | |||
231 | 237 | ||
232 | }; // end namespace StringUtil | 238 | }; // end namespace StringUtil |
233 | 239 | ||
234 | StringConvertor::StringConvertor(EncodingTarget target): | 240 | StringConvertor::StringConvertor(EncodingTarget target): |
235 | #ifdef HAVE_ICONV | 241 | #ifdef HAVE_ICONV |
236 | m_iconv((iconv_t)(-1)) { | 242 | m_iconv((iconv_t)(-1)) { |
237 | if (target == ToLocaleStr) | 243 | if (target == ToLocaleStr) |
@@ -251,9 +257,9 @@ StringConvertor::~StringConvertor() { | |||
251 | #endif | 257 | #endif |
252 | } | 258 | } |
253 | 259 | ||
254 | bool StringConvertor::setSource(const std::string &encoding) { | 260 | bool StringConvertor::setSource(const string &encoding) { |
255 | #ifdef HAVE_ICONV | 261 | #ifdef HAVE_ICONV |
256 | std::string tempenc = encoding; | 262 | string tempenc = encoding; |
257 | if (encoding == "") | 263 | if (encoding == "") |
258 | tempenc = FbStringUtil::locale_codeset; | 264 | tempenc = FbStringUtil::locale_codeset; |
259 | 265 | ||
@@ -270,8 +276,8 @@ bool StringConvertor::setSource(const std::string &encoding) { | |||
270 | return false; | 276 | return false; |
271 | #endif | 277 | #endif |
272 | } | 278 | } |
273 | 279 | ||
274 | std::string StringConvertor::recode(const std::string &src) { | 280 | string StringConvertor::recode(const string &src) { |
275 | #ifdef HAVE_ICONV | 281 | #ifdef HAVE_ICONV |
276 | return FbStringUtil::recode(m_iconv, src); | 282 | return FbStringUtil::recode(m_iconv, src); |
277 | #else | 283 | #else |