/* * ace_breakLine.cpp * * Takes a string and insert as many line breaks as needed so it fits a given width * * Takes: * Localized string as string * Example: "Check weapon temperature" * * Returns: * String with line breaks */ #include "ace_common.h" #include #include #include #define MAXCHARACTERS 14 static char version[] = "1.0"; extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; std::vector splitString(std::string input) { std::istringstream ss(input); std::string token; std::vector output; while (std::getline(ss, token, ' ')) { output.push_back(token); } return output; } std::string addLineBreaks(const std::vector &words) { std::stringstream sstream; int numChar = 0; int i = 0; while (i < words.size()) { if (numChar == 0) { sstream << words[i]; numChar += words[i].size(); i++; } else { if (numChar + 1 + words[i].size() > MAXCHARACTERS) { sstream << "
"; numChar = 0; } else { sstream << " " << words[i]; numChar += 1 + words[i].size(); i++; } } } return sstream.str(); } // i like to live dangerously. jk, fix strncpy sometime pls. #pragma warning( push ) #pragma warning( disable : 4996 ) void __stdcall RVExtension(char *output, int outputSize, const char *function) { //strncpy(output, function, outputSize); if (!strcmp(function, "version")) { strncpy(output, version, outputSize); } else { strcpy(output, addLineBreaks(splitString(function)).c_str()); output[outputSize - 1] = '\0'; } } #pragma warning( pop )