12 #include "../stdafx.h"
13 #include "../strgen/strgen.h"
15 #include "../fileio_func.h"
16 #include "../tar_type.h"
17 #include "../script/squirrel_class.hpp"
18 #include "../strings_func.h"
23 #include "table/strings.h"
27 #include "../safeguards.h"
29 void CDECL strgen_warning(
const char *s, ...)
40 void CDECL strgen_error(
const char *s, ...)
51 void NORETURN CDECL strgen_fatal(
const char *s, ...)
59 throw std::exception();
69 this->language =
stredup(language, end != NULL ? end - 1 : NULL);
94 const char *langname = strrchr(file, PATHSEPCHAR);
95 if (langname == NULL) {
102 if (*langname ==
'.' || *langname == 0) {
110 while (to_read != 0 && fgets(buffer,
sizeof(buffer), fh) != NULL) {
111 size_t len = strlen(buffer);
115 while (i > 0 && (buffer[i - 1] ==
'\r' || buffer[i - 1] ==
'\n' || buffer[i - 1] ==
' ')) i--;
130 if (fh != NULL) fclose(fh);
139 const char *
const *
p;
150 StringReader(data, strings->language, master, translation),
p(strings->lines.Begin()),
end(strings->lines.End())
156 if (this->
p == this->
end)
return NULL;
192 void Write(
const byte *buffer,
size_t length)
194 char *dest = MallocT<char>(length + 1);
195 memcpy(dest, buffer, length);
240 void Scan(
const char *directory)
245 bool AddFile(
const char *filename,
size_t basepath_length,
const char *tar_filename)
247 if (strcmp(filename, exclude) == 0)
return true;
263 char *e = strrchr(filename, PATHSEPCHAR);
264 if (e == NULL)
return NULL;
277 size_t len = strlen(filename);
279 const char *tar_filename = info->
GetTarFile();
280 TarList::iterator iter;
281 if (tar_filename != NULL && (iter = _tar_list[
GAME_DIR].find(tar_filename)) != _tar_list[
GAME_DIR].end()) {
284 TarFileList::iterator tar;
287 if (tar->second.tar_filename != iter->first)
continue;
290 if (tar->first.size() <= len || tar->first.compare(0, len, filename) != 0)
continue;
291 if (tar->first.compare(tar->first.size() - 4, 4,
".txt") != 0)
continue;
293 scanner.
AddFile(tar->first.c_str(), 0, tar_filename);
297 scanner.
Scan(filename);
314 if (_errors != 0)
throw std::exception();
323 StringListReader translation_reader(data, *p,
false, strcmp((*p)->language,
"english") != 0);
325 if (_errors != 0)
throw std::exception();
355 if (_current_data == NULL)
return;
357 HSQUIRRELVM vm = engine->
GetVM();
358 sq_pushroottable(vm);
359 sq_pushstring(vm,
"GSText", -1);
360 if (SQ_FAILED(sq_get(vm, -2)))
return;
364 sq_pushstring(vm, *p, -1);
365 sq_pushinteger(vm, idx);
379 if (_current_data == NULL)
return;
385 char *l = strrchr(temp,
'.');
390 char *language = strrchr(temp, PATHSEPCHAR);
391 assert(language != NULL);
395 if (strcmp((*p)->language, language) == 0) {