You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.4KB

  1. #include "util/util.hpp"
  2. #include <stdarg.h>
  3. #include <algorithm>
  4. #include <libgen.h> // for dirname and basename
  5. namespace rack {
  6. std::string stringf(const char *format, ...) {
  7. va_list args;
  8. va_start(args, format);
  9. // Compute size of required buffer
  10. int size = vsnprintf(NULL, 0, format, args);
  11. va_end(args);
  12. if (size < 0)
  13. return "";
  14. // Create buffer
  15. std::string s;
  16. s.resize(size);
  17. va_start(args, format);
  18. vsnprintf(&s[0], size + 1, format, args);
  19. va_end(args);
  20. return s;
  21. }
  22. std::string lowercase(std::string s) {
  23. std::transform(s.begin(), s.end(), s.begin(), ::tolower);
  24. return s;
  25. }
  26. std::string uppercase(std::string s) {
  27. std::transform(s.begin(), s.end(), s.begin(), ::toupper);
  28. return s;
  29. }
  30. std::string ellipsize(std::string s, size_t len) {
  31. if (s.size() <= len)
  32. return s;
  33. else
  34. return s.substr(0, len - 3) + "...";
  35. }
  36. bool startsWith(std::string str, std::string prefix) {
  37. return str.substr(0, prefix.size()) == prefix;
  38. }
  39. std::string extractDirectory(std::string path) {
  40. char *pathDup = strdup(path.c_str());
  41. std::string directory = dirname(pathDup);
  42. free(pathDup);
  43. return directory;
  44. }
  45. std::string extractFilename(std::string path) {
  46. char *pathDup = strdup(path.c_str());
  47. std::string filename = basename(pathDup);
  48. free(pathDup);
  49. return filename;
  50. }
  51. std::string extractExtension(std::string path) {
  52. const char *ext = strrchr(path.c_str(), '.');
  53. if (!ext)
  54. return "";
  55. return ext + 1;
  56. }
  57. } // namespace rack