/* * ace_break_line.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 "shared.hpp" #include #include #include #define MAXCHARACTERS 14 extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; std::vector splitString(const 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; size_t numChar = 0; size_t 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) { ZERO_OUTPUT(); if (!strcmp(function, "version")) { strncpy(output, ACE_FULL_VERSION_STR, outputSize); } else { strncpy(output, addLineBreaks(splitString(function)).c_str(), outputSize); output[outputSize - 1] = '\0'; } EXTENSION_RETURN(); } #pragma warning( pop )