ACE3/extensions/break_line/ace_break_line.cpp

79 lines
1.8 KiB
C++
Raw Normal View History

2015-04-12 01:22:19 +00:00
/*
2015-05-01 00:14:23 +00:00
* ace_break_line.cpp
2015-04-12 01:22:19 +00:00
*
* 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"
2015-04-12 01:22:19 +00:00
#include <sstream>
#include <vector>
#include <string>
2015-04-12 02:39:06 +00:00
#define MAXCHARACTERS 14
2015-04-12 01:22:19 +00:00
extern "C" {
__declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function);
};
std::vector<std::string> splitString(const std::string & input) {
2015-04-12 01:22:19 +00:00
std::istringstream ss(input);
std::string token;
std::vector<std::string> output;
2015-04-12 02:39:06 +00:00
while (std::getline(ss, token, ' ')) {
2015-04-12 01:22:19 +00:00
output.push_back(token);
}
return output;
}
2015-04-12 02:39:06 +00:00
std::string addLineBreaks(const std::vector<std::string> &words) {
2015-04-12 01:22:19 +00:00
std::stringstream sstream;
2015-04-21 23:50:01 +00:00
size_t numChar = 0;
size_t i = 0;
2015-04-12 02:39:06 +00:00
while (i < words.size()) {
if (numChar == 0) {
sstream << words[i];
numChar += words[i].size();
i++;
2015-04-12 01:22:19 +00:00
} else {
2015-04-12 02:39:06 +00:00
if (numChar + 1 + words[i].size() > MAXCHARACTERS) {
sstream << "<br/>";
numChar = 0;
} else {
sstream << " " << words[i];
numChar += 1 + words[i].size();
i++;
}
2015-04-12 01:22:19 +00:00
}
}
2015-04-12 01:22:19 +00:00
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();
2015-04-12 01:22:19 +00:00
if (!strcmp(function, "version")) {
strncpy(output, ACE_FULL_VERSION_STR, outputSize);
2015-04-12 01:22:19 +00:00
} else {
strncpy(output, addLineBreaks(splitString(function)).c_str(), outputSize);
2015-04-12 01:22:19 +00:00
output[outputSize - 1] = '\0';
}
EXTENSION_RETURN();
2015-04-12 01:22:19 +00:00
}
#pragma warning( pop )