X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fconvert.cc;h=c9af72750434e32dec7a4874d479cd4fe6545b1e;hb=6180c5a5fc9a663858d12c31a6783e12f02bfcba;hp=07407e2fadc0ef37ec9104fd5fb171e680a81062;hpb=d6051c9953ea8778399ad72fc91c334c242d25e0;p=ardour.git diff --git a/libs/pbd/convert.cc b/libs/pbd/convert.cc index 07407e2fad..c9af727504 100644 --- a/libs/pbd/convert.cc +++ b/libs/pbd/convert.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2006 Paul Davis + Copyright (C) 2006 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,9 @@ */ #include +#include +#include + #include #include #include @@ -28,9 +31,11 @@ #endif #include +#include + #include "pbd/convert.h" -#include "i18n.h" +#include "pbd/i18n.h" using std::string; using std::vector; @@ -49,6 +54,24 @@ capitalize (const string& str) return ret; } +string +downcase (const string& str) +{ + string copy (str); + std::transform (copy.begin(), copy.end(), copy.begin(), ::tolower); + return copy; +} + +const char* +downcase (const char* str) +{ + char *copy = strdup (str); + for (char* p = copy; *p; ++p) { + *p = tolower (*p); + } + return copy; +} + string short_version (string orig, string::size_type target_length) { @@ -109,7 +132,7 @@ short_version (string orig, string::size_type target_length) } /* whatever the length is now, use it */ - + return orig; } @@ -149,8 +172,8 @@ internationalize (const char *package_name, const char **array) return v; } -static int32_t -int_from_hex (char hic, char loc) +static int32_t +int_from_hex (char hic, char loc) { int hi; /* hi byte */ int lo; /* low byte */ @@ -164,9 +187,9 @@ int_from_hex (char hic, char loc) } else if( ('A'<=hi) && (hi<='F') ) { hi -= ('A'-10); } - + lo = (int) loc; - + if( ('0'<=lo) && (lo<='9') ) { lo -= '0'; } else if( ('a'<=lo) && (lo<='f') ) { @@ -226,18 +249,18 @@ length2string (const int64_t frames, const double sample_rate) secs -= (hrs * 3600LL); int64_t mins = secs / 60LL; secs -= (mins * 60LL); - + int64_t total_secs = (hrs * 3600LL) + (mins * 60LL) + secs; int64_t frames_remaining = (int64_t) floor (frames - (total_secs * sample_rate)); float fractional_secs = (float) frames_remaining / sample_rate; - + char duration_str[64]; sprintf (duration_str, "%02" PRIi64 ":%02" PRIi64 ":%05.2f", hrs, mins, (float) secs + fractional_secs); - + return duration_str; } -static bool +static bool chars_equal_ignore_case(char x, char y) { /* app should have called setlocale() if its wants this comparison to be @@ -246,7 +269,7 @@ chars_equal_ignore_case(char x, char y) return toupper (x) == toupper (y); } -bool +bool strings_equal_ignore_case (const string& a, const string& b) { if (a.length() == b.length()) { @@ -255,26 +278,6 @@ strings_equal_ignore_case (const string& a, const string& b) return false; } -bool -string_is_affirmative (const std::string& str) -{ - /* to be used only with XML data - not intended to handle user input */ - - if (str.empty ()) { - return false; - } - - /* the use of g_strncasecmp() is solely to get around issues with - * charsets posed by trying to use C++ for the same - * comparison. switching a std::string to its lower- or upper-case - * version has several issues, but handled by default - * in the way we desire when doing it in C. - */ - - return str == "1" || str == "y" || str == "Y" || (!g_strncasecmp(str.c_str(), "yes", str.length())) || - (!g_strncasecmp(str.c_str(), "true", str.length())); -} - /** A wrapper for dgettext that takes a msgid of the form Context|Text. * If Context|Text is translated, the translation is returned, otherwise * just Text is returned. Useful for getting translations of words or phrases