Esempio n. 1
0
File: t.cpp Progetto: pedia/raidget
void LngSetAdd(const char *id, int lang, const char *txt, bool addid)
{
	CriticalSection::Lock __(slng);
	CharS ids;
	ids.s = PermanentCopy(id);
	String text = ToCharset(CHARSET_UTF8, txt, GetLNGCharset(lang));
	lang = SetLNGCharset(lang, CHARSET_UTF8);
	Array<LngModule>& ma = sMod();
	for(int i = 0; i < ma.GetCount(); i++) {
		LngModule& m = ma[i];
		int q = m.map.Find(ids);
		if(q >= 0) {
			char *t = PermanentCopy(text);
			Vector<LngRec>& r = m.map[q];
			for(int i = 0; i < r.GetCount(); i++)
				if(r[i].lang == lang) {
					r[i].text = t;
					return;
				}
			LngRec& rec = r.Add();
			rec.lang = lang;
			rec.text = t;
			return;
		}
	}
	if(addid) {
		if(ma.GetCount() == 0)
			ma.Add();
		LngRec& r = ma.Top().map.Add(ids).Add();
		char *t = PermanentCopy(text);
		strcpy(t, text);
		r.lang = lang;
		r.text = t;
	}
}
Esempio n. 2
0
File: t.cpp Progetto: pedia/raidget
String GetLngString_(int lang, const char *id)
{
	if(!lang)
		lang = current_lang;
	const LngRec *r = sFindLngRec(id, lang);
	if(r) {
		int dch = GetLNGCharset(lang);
		if(dch == CHARSET_UTF8)
			return r->text;
		else
			return ToCharset(dch, r->text, CHARSET_UTF8);
	}
	return GetENUSc(id);
}
Esempio n. 3
0
static dword sGetLanguageDetails(int language, String *english_name, String *native_name)
{
	int q = 0;
	byte cs = GetLNGCharset(language);
	language &= ~LNGC_(0, 0, 0, 0, ~0);
	for(const int *ptr = LanguageList; *ptr; ptr++, q++)
		if(*ptr == language) {
			const char *f = LanguageInfoList[q];
			const char *a = strchr(f, '\t');
			const char *b = strchr(a + 1, '\t');
			if(english_name)
				*english_name = String(f, a);
			if(native_name)
				*native_name = ToCharset(cs, String(a + 1, b), CHARSET_UTF8);
			return MAKEWORD(b[2], b[1]);
		}
	return 0;
}
Esempio n. 4
0
NAMESPACE_UPP

#define LLOG(x) // RLOG(x)
#define LDUMP(x) // RDUMP(x)

#define LNGLIST() \
	LNGITEM(LNG_CZECH,   CHARSET_WIN1250) \
	LNGITEM(LNG_ENGLISH, CHARSET_WIN1252) \
//	LNGITEM(LNG_GERMAN,  CHARSET_WIN1252) \

#define LNGITEM(lcode, charset)

static String LNGAsTextShort(int language)
{
	int charset = GetLNGCharset(language);
	String lcode = LNGAsText(language & ~(-1 << 20));
	if(charset != CHARSET_UNICODE)
		lcode << charset;
	return lcode;
}
Esempio n. 5
0
File: t.cpp Progetto: pedia/raidget
const char *t_GetLngString_(const char *id)
{
	VectorMap<const char *, const char *>& map = sCurrentLangMap();
	int q = map.Find(id);
	if(q >= 0)
		return map[q];
	const LngRec *r = sFindLngRec(id, current_lang);
	if(r) {
		int dch = GetLNGCharset(current_lang);
		if(dch == CHARSET_UTF8) {
			map.Add(id, r->text);
			return r->text;
		}
		String text = ToCharset(dch, r->text, CHARSET_UTF8);
		char *q = Single<ZoneAlloc>().Alloc(text.GetLength() + 1);
		strcpy(q, ~text);
		map.Add(id, q);
		return q;
	}

	const char *txt = GetENUSc(id);
	map.Add(id, txt);
	return txt;
}
Esempio n. 6
0
String LoadStreamBOM(Stream& in)
{
	return LoadStreamBOM(in, GetLNGCharset(GetSystemLNG()));
}