diff --git a/dfhack/include/modules/Translation_C.h b/dfhack/include/modules/Translation_C.h index 80702c1cd..37bd37a45 100644 --- a/dfhack/include/modules/Translation_C.h +++ b/dfhack/include/modules/Translation_C.h @@ -40,6 +40,9 @@ extern "C" { DFHACK_EXPORT int Translation_Start(DFHackObject* trans); DFHACK_EXPORT int Translation_Finish(DFHackObject* trans); +DFHACK_EXPORT char* Translation_TranslateNameEnglish(DFHackObject* trans, const DFHack::t_name* name, char* (*char_buffer_create)(int)); +DFHACK_EXPORT char* Translation_TranslateNameNonEnglish(DFHackObject* trans, const DFHack::t_name* name, char* (*char_buffer_create)(int)); + #ifdef __cplusplus } #endif diff --git a/dfhack/modules/Translation_C.cpp b/dfhack/modules/Translation_C.cpp index abba212db..017fb092e 100644 --- a/dfhack/modules/Translation_C.cpp +++ b/dfhack/modules/Translation_C.cpp @@ -23,6 +23,10 @@ distribution. */ #include "integers.h" +#include + +using namespace std; + #include "DFCommonInternal.h" #include "DFTypes.h" #include "modules/Translation.h" @@ -54,6 +58,64 @@ int Translation_Finish(DFHackObject* trans) return -1; } +char* Translation_TranslateNameEnglish(DFHackObject* trans, const DFHack::t_name* name, char* (*char_buffer_create)(int)) +{ + if(trans != NULL) + { + std::string nameTrans = ((DFHack::Translation*)trans)->TranslateName(*name, true); + + if(nameTrans.size() > 0) + { + char* buf = (*char_buffer_create)(nameTrans.size()); + + if(buf != NULL) + { + size_t len = nameTrans.copy(buf, nameTrans.size()); + + if(len > 0) + buf[len] = '\0'; + else + buf[0] = '\0'; + } + + return buf; + } + else + return NULL; + } + + return NULL; +} + +char* Translation_TranslateNameNonEnglish(DFHackObject* trans, const DFHack::t_name* name, char* (*char_buffer_create)(int)) +{ + if(trans != NULL) + { + std::string nameTrans = ((DFHack::Translation*)trans)->TranslateName(*name, false); + + if(nameTrans.size() > 0) + { + char* buf = (*char_buffer_create)(nameTrans.size()); + + if(buf != NULL) + { + size_t len = nameTrans.copy(buf, nameTrans.size()); + + if(len > 0) + buf[len] = '\0'; + else + buf[0] = '\0'; + } + + return buf; + } + else + return NULL; + } + + return NULL; +} + #ifdef __cplusplus } #endif