From 116e5d60be2c52930a6447ec7e76c8f7807fe261 Mon Sep 17 00:00:00 2001 From: Quietust Date: Fri, 27 Jan 2012 21:36:01 -0600 Subject: [PATCH] Update Translation::TranslateName to include the first name, plus have it follow the init setting for nickname display (in Dwarf mode) --- library/modules/Translation.cpp | 65 +++++++++++++++++++++++++++------ plugins/cleanowned.cpp | 9 +---- plugins/showmood.cpp | 2 +- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/library/modules/Translation.cpp b/library/modules/Translation.cpp index 74de70bd3..50336bea9 100644 --- a/library/modules/Translation.cpp +++ b/library/modules/Translation.cpp @@ -38,11 +38,14 @@ using namespace std; using namespace DFHack; using namespace DFHack::Simple; +using namespace df::enums; #include "DataDefs.h" #include "df/world.h" +#include "df/d_init.h" using df::global::world; +using df::global::d_init; bool Translation::IsValid () { @@ -82,22 +85,53 @@ string Translation::TranslateName(const df::language_name * name, bool inEnglish { string out; - if(!inEnglish) + string word = name->first_name; + word[0] = toupper(word[0]); + out.append(word); + + if (!name->nickname.empty()) + { + word = "`" + name->nickname + "'"; + switch (d_init ? d_init->nickname_dwarf : d_init_nickname::CENTRALIZE) + { + case d_init_nickname::REPLACE_ALL: + out = word; + return out; + case d_init_nickname::REPLACE_FIRST: + out = ""; + break; + case d_init_nickname::CENTRALIZE: + break; + } + if (out.length() > 0) + out.append(" "); + out.append(word); + } + + if (!inEnglish) { if (name->words[0] >= 0 || name->words[1] >= 0) { + word.clear(); + if (name->words[0] >= 0) - out.append(*world->raws.language.translations[name->language]->words[name->words[0]]); + word.append(*world->raws.language.translations[name->language]->words[name->words[0]]); if (name->words[1] >= 0) - out.append(*world->raws.language.translations[name->language]->words[name->words[1]]); - out[0] = toupper(out[0]); + word.append(*world->raws.language.translations[name->language]->words[name->words[1]]); + + word[0] = toupper(word[0]); + if (out.length() > 0) + out.append(" "); + out.append(word); } if (name->words[5] >= 0) { - string word; + word.clear(); + for (int i = 2; i <= 5; i++) if (name->words[i] >= 0) word.append(*world->raws.language.translations[name->language]->words[name->words[i]]); + word[0] = toupper(word[0]); if (out.length() > 0) out.append(" "); @@ -105,7 +139,9 @@ string Translation::TranslateName(const df::language_name * name, bool inEnglish } if (name->words[6] >= 0) { - string word = *world->raws.language.translations[name->language]->words[name->words[6]]; + word.clear(); + + word.append(*world->raws.language.translations[name->language]->words[name->words[6]]); word[0] = toupper(word[0]); if (out.length() > 0) @@ -117,11 +153,17 @@ string Translation::TranslateName(const df::language_name * name, bool inEnglish { if (name->words[0] >= 0 || name->words[1] >= 0) { + word.clear(); + if (name->words[0] >= 0) - out.append(world->raws.language.words[name->words[0]]->forms[name->parts_of_speech[0].value]); + word.append(world->raws.language.words[name->words[0]]->forms[name->parts_of_speech[0].value]); if (name->words[1] >= 0) - out.append(world->raws.language.words[name->words[1]]->forms[name->parts_of_speech[1].value]); - out[0] = toupper(out[0]); + word.append(world->raws.language.words[name->words[1]]->forms[name->parts_of_speech[1].value]); + + word[0] = toupper(word[0]); + if (out.length() > 0) + out.append(" "); + out.append(word); } if (name->words[5] >= 0) { @@ -133,7 +175,7 @@ string Translation::TranslateName(const df::language_name * name, bool inEnglish { if (name->words[i] >= 0) { - string word = world->raws.language.words[name->words[i]]->forms[name->parts_of_speech[i].value]; + word = world->raws.language.words[name->words[i]]->forms[name->parts_of_speech[i].value]; word[0] = toupper(word[0]); out.append(" " + word); } @@ -146,10 +188,11 @@ string Translation::TranslateName(const df::language_name * name, bool inEnglish else out.append("Of"); - string word = world->raws.language.words[name->words[6]]->forms[name->parts_of_speech[6].value]; + word = world->raws.language.words[name->words[6]]->forms[name->parts_of_speech[6].value]; word[0] = toupper(word[0]); out.append(" " + word); } } + return out; } diff --git a/plugins/cleanowned.cpp b/plugins/cleanowned.cpp index 911f23c94..2cc213715 100644 --- a/plugins/cleanowned.cpp +++ b/plugins/cleanowned.cpp @@ -184,14 +184,7 @@ DFhackCExport command_result df_cleanowned (Core * c, vector & paramete std::string info; if (owner) - { - info = owner->name.first_name; - if (!owner->name.nickname.empty()) - info += std::string(" '") + owner->name.nickname + "'"; - info += " "; - info += Translation::TranslateName(&owner->name,false); - c->con.print(", owner %s", info.c_str()); - } + c->con.print(", owner %s", Translation::TranslateName(&owner->name,false).c_str()); if (!dry_run) { diff --git a/plugins/showmood.cpp b/plugins/showmood.cpp index dad10efa4..25bc43613 100644 --- a/plugins/showmood.cpp +++ b/plugins/showmood.cpp @@ -61,7 +61,7 @@ DFhackCExport command_result df_showmood (Core * c, vector & parameters c->con.printerr("Dwarf with strange mood does not have a mood type!\n"); continue; } - c->con.print("%s %s is currently ", unit->name.first_name.c_str(), Translation::TranslateName(&unit->name, false).c_str()); + c->con.print("%s is currently ", Translation::TranslateName(&unit->name, false).c_str()); switch (unit->mood) { case mood_type::Macabre: