/* aux/functions.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "auxiliary/functions.h" namespace aux { const std::string plural(const char * word, size_t n) { std::string p(word); if (n != 1) p += 's'; return p; } const std::string article(const char * word) { std::string w(word); if (!w.size()) return w; switch (word[0]) { case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': case 'y': case 'Y': w.assign("an "); break; default: w.assign("a "); } w.append(word); return w; } size_t text_length(const std::string &text) { const char *c = text.c_str(); size_t len = 0; while (*c) { if (is_color_code(c)) { c++; } else { len++; } c++; } return len; } const std::string text_strip(const std::string &text) { const char *c = text.c_str(); std::string r; while (*c) { if (is_color_code(c)) { c++; } else { r += *c; } c++; } return r; } const std::string text_strip_lowercase(const std::string &text) { const char *c = text.c_str(); std::string r; while (*c) { if (is_color_code(c)) { c++; } else { r += tolower(*c); } c++; } return r; } const std::string pad_left(const std::string &text, size_t n) { size_t l = text_length(text); if (n <= l) return text; std::string s; s.assign(n - l, ' '); s.append(text); return s; } const std::string pad_right(const std::string &text, size_t n) { size_t l = text_length(text); if (n <= l) return text; std::string s(text); s.append(n - l, ' '); return s; } void to_lowercase(std::string &text) { for (std::string::iterator i = text.begin(); i != text.end(); ++i) (*i) = tolower(*i); } const std::string lowercase(const std::string &text) { std::string t; for (std::string::const_iterator i = text.begin(); i != text.end(); ++i) t += tolower(*i); return t; } void trim(std::string &text) { while (text.size() && text[0] == ' ') { text.erase(0, 1); } while (text.size() && text[text.size()-1] == ' ') { text.erase(text.size() - 1, 1); } } void to_label(std::string &text) { trim(text); size_t pos = 0; while (pos < text.size()) { if ((text[pos] == ' ') || (text[pos] == '-') || (text[pos] == '_')) { text[pos] = '_'; pos++; } else if ((text[pos] >= 'A') && (text[pos] <= 'Z')) { text[pos] = text[pos] + 'a' - 'A'; pos++; } else if ((text[pos] >= 'a') && (text[pos] <= 'z')) { pos++; } else if ((text[pos] >= '0') && (text[pos] <= '9')) { pos++; } else { text.erase(pos, 1); } } } void strip_quotes(std::string &text) { for (size_t pos = 0; pos < text.size(); pos++) { if (text[pos] == '"') { text[pos] = '\''; } } } }