#include <config.h>
#include <sys/types.h>
-#include <iconv.h>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <ctype.h>
#include <errno.h>
+#include "SDL.h"
+
#include "tinygettext.hpp"
#include "log.hpp"
#include "physfs/physfs_stream.hpp"
-#include "log.hpp"
#include "findlocale.hpp"
//#define TRANSLATION_DEBUG
if (from_charset == to_charset)
return text;
- iconv_t cd = iconv_open(to_charset.c_str(), from_charset.c_str());
+ char *in = new char[text.length() + 1];
+ strcpy(in, text.c_str());
+ char *out = SDL_iconv_string(to_charset.c_str(), from_charset.c_str(), in, text.length() + 1);
+ delete[] in;
+ if(out == 0)
+ {
+ log_warning << "Error: conversion from " << from_charset << " to " << to_charset << " failed" << std::endl;
+ return "";
+ }
+ std::string ret(out);
+ SDL_free(out);
+ return ret;
+#if 0
+ iconv_t cd = SDL_iconv_open(to_charset.c_str(), from_charset.c_str());
size_t in_len = text.length();
size_t out_len = text.length()*3; // FIXME: cross fingers that this is enough
size_t out_len_temp = out_len; // iconv is counting down the bytes it has
// written from this...
- size_t retval = iconv(cd, &in, &in_len, &out, &out_len_temp);
+ size_t retval = SDL_iconv(cd, &in, &in_len, &out, &out_len_temp);
out_len -= out_len_temp; // see above
if (retval == (size_t) -1)
{
log_warning << "Error: conversion from " << from_charset << " to " << to_charset << " went wrong: " << retval << std::endl;
return "";
}
- iconv_close(cd);
+ SDL_iconv_close(cd);
std::string ret(out_orig, out_len);
delete[] out_orig;
delete[] in_orig;
return ret;
+#endif
}
bool has_suffix(const std::string& lhs, const std::string rhs)
char c = ' ';
while(in.good() && !in.eof()) {
- while(isspace(c) && !in.eof())
+ while(isspace(static_cast<unsigned char>(c)) && !in.eof())
in.get(c);
if(c == '#') { // skip comments
}
std::string alias;
- while(!isspace(c) && !in.eof()) {
+ while(!isspace(static_cast<unsigned char>(c)) && !in.eof()) {
alias += c;
in.get(c);
}
- while(isspace(c) && !in.eof())
+ while(isspace(static_cast<unsigned char>(c)) && !in.eof())
in.get(c);
std::string language;
- while(!isspace(c) && !in.eof()) {
+ while(!isspace(static_cast<unsigned char>(c)) && !in.eof()) {
language += c;
in.get(c);
}
}
else
{
-#ifdef TRANSLATION_DBEUG
+#ifdef TRANSLATION_DEBUG
log_warning << "Couldn't translate: " << msgid << std::endl;
#endif
return msgid;
}
else
{
-#ifdef TRANSLATION_DBEUG
+#ifdef TRANSLATION_DEBUG
log_warning << "Couldn't translate: " << msgid << std::endl;
#endif
return msgid;
void parse_header(const std::string& header)
{
- // Seperate the header in lines
+ // Separate the header in lines
typedef std::vector<std::string> Lines;
Lines lines;
{
state = SKIP_COMMENT;
}
+ else if (c == '\n')
+ {
+ }
else
{
// Read a new token
do { // Read keyword
token.keyword += c;
- } while((c = getchar(in)) != EOF && !isspace(c));
+ } while((c = getchar(in)) != EOF && !isspace(static_cast<unsigned char>(c)));
in.unget();
state = READ_CONTENT;
// Found start of content
state = READ_CONTENT_IN_STRING;
break;
- } else if (isspace(c)) {
+ } else if (isspace(static_cast<unsigned char>(c))) {
// skip
} else { // Read something that may be a keyword
in.unget();
state = READ_KEYWORD;
add_token(token);
+ token = Token();
break;
}
}
else if (c == 't') token.content += '\t';
else if (c == 'r') token.content += '\r';
else if (c == '"') token.content += '"';
+ else if (c == '\\') token.content += '\\';
else
{
log_warning << "Unhandled escape character: " << char(c) << std::endl;
}
}
add_token(token);
+ token = Token();
}
};