diff options
Diffstat (limited to 'tools/msgenc/msgenc.cpp')
-rw-r--r-- | tools/msgenc/msgenc.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/tools/msgenc/msgenc.cpp b/tools/msgenc/msgenc.cpp index e28232a6..24bcda8d 100644 --- a/tools/msgenc/msgenc.cpp +++ b/tools/msgenc/msgenc.cpp @@ -99,16 +99,29 @@ void encode_messages() { size_t k = message.find('}', j); string enclosed = message.substr(j + 1, k - j - 1); j = k; - if (enclosed.find("STRVAR ") == 0) { - enclosed = enclosed.substr(7); + size_t pos = enclosed.find(' '); + string command = enclosed.substr(0, pos); + enclosed = enclosed.substr(pos + 1); + uint16_t command_i = charmap[command]; + if (command_i != 0 || command == "STRVAR") { encoded += enc_short(0xFFFE, seed); + vector<uint16_t> args; + if (command_i != 0) { + args.push_back(command_i); + } do { k = enclosed.find(','); string num = enclosed.substr(0, k); uint16_t num_i = stoi(num); - encoded += enc_short(num_i, seed); + args.push_back(num_i); enclosed = enclosed.substr(k + 1); } while (k++ != string::npos); + encoded += enc_short(args[0], seed); + args.erase(args.begin()); + encoded += enc_short(args.size(), seed); + for (auto num_i : args) { + encoded += enc_short(num_i, seed); + } } else { encoded += enc_short(stoi(enclosed, nullptr, 16), seed); } |