Finished Language Generation Tool

This commit is contained in:
2023-02-15 18:02:49 -08:00
parent b8bab7ebed
commit 4cd417a8fc
4 changed files with 166 additions and 5 deletions

View File

@ -25,7 +25,86 @@ int32_t GeneratedLanguages::start() {
}
// Now process each language file
std::map<std::string, std::map<std::string, std::string>> strings;
std::vector<std::string> knownKeys;
auto itFiles = files.begin();
while(itFiles != files.end()) {
File file(*itFiles);
file.open(FILE_MODE_READ);
std::string buffer;
size_t n = 0;
while(n < file.length) {
char lang[32];
char key[128];
char string[32178];
// Read lang
if(n != 0) file.setPosition(n);
auto langSize = file.readAhead(lang, 32, '|');
lang[langSize] = '\0';
n += langSize + 1;
if(langSize <= 0) {
std::cout << "Error reading language name: " << langSize << std::endl;
return 1;
}
// Read Key
file.setPosition(n);
auto keySize = file.readAhead(key, 128, '|');
key[keySize] = '\0';
n += keySize + 1;
if(keySize <= 0) {
std::cout << "Error reading language key: " << keySize << std::endl;
return 1;
}
// Read String
file.setPosition(n);
auto stringSize = file.readAhead(string, 32178, '|');
string[stringSize] = '\0';
n += stringSize + 1;
if(stringSize <= 0) {
std::cout << "Error reading language string: " << stringSize << std::endl;
return 1;
}
strings[lang][key] = string;
auto exist = std::find(knownKeys.begin(), knownKeys.end(), key);
if(exist == knownKeys.end()) knownKeys.push_back(key);
}
++itFiles;
}
// Now prepare output file
auto itLang = strings.begin();
std::string bufferOut = "";
while(itLang != strings.end()) {
File langOut(flags["output"] + FILE_PATH_SEP + "language_" + itLang->first + ".language");
bufferOut.clear();
auto itKeys = knownKeys.begin();
while(itKeys != knownKeys.end()) {
auto key = *itKeys;
auto exist = itLang->second.find(key);
if(exist == itLang->second.end()) {
std::cout << "Language " << itLang->first << " is missing key " << key << std::endl;
return 1;
}
std::cout << "bruh " << exist->second << std::endl;
bufferOut += exist->first + "|" + exist->second + "|";
++itKeys;
}
// Write out.
if(!langOut.writeString(bufferOut)) {
std::cout << "Failed to create output file \"" + langOut.filename + "\"" << std::endl;
return 1;
}
++itLang;
}
return 0;
}