From 8f693cd822365c3827be3ab40707a3111111bd0d Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sat, 8 Sep 2012 15:58:35 +0200 Subject: [PATCH] string: fix lowercase function --- src/actions.cpp | 5 ++--- src/browser.cpp | 3 +-- src/lastfm.cpp | 3 +-- src/media_library.cpp | 9 +++------ src/strbuffer.h | 20 ++++++++++++-------- src/tag_editor.cpp | 5 +---- src/tiny_tag_editor.cpp | 3 +-- src/utility/string.h | 14 +++++++++++--- 8 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/actions.cpp b/src/actions.cpp index 4a800efe..626d05cb 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -2065,8 +2065,7 @@ void AddRandomItems::Run() if (answer != 's') { tag_type = charToTagType(answer); - tag_type_str = tagTypeToString(tag_type); - lowercase(tag_type_str); + tag_type_str = lowercase(tagTypeToString(tag_type)); } else tag_type_str = "song"; @@ -2137,7 +2136,7 @@ void ToggleLibraryTagType::Run() std::string item_type = tagTypeToString(Config.media_lib_primary_tag); myLibrary->Tags->setTitle(Config.titles_visibility ? item_type + "s" : ""); myLibrary->Tags->reset(); - lowercase(item_type); + item_type = lowercase(item_type); if (myLibrary->Columns() == 2) { myLibrary->Songs->clear(); diff --git a/src/browser.cpp b/src/browser.cpp index 83a3c8f2..c8030547 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -609,8 +609,7 @@ bool hasSupportedExtension(const std::string &file) if (last_dot > file.length()) return false; - std::string ext = file.substr(last_dot+1); - lowercase(ext); + std::string ext = lowercase(file.substr(last_dot+1)); return SupportedExtensions.find(ext) != SupportedExtensions.end(); } diff --git a/src/lastfm.cpp b/src/lastfm.cpp index be62c313..319fa3c2 100644 --- a/src/lastfm.cpp +++ b/src/lastfm.cpp @@ -124,8 +124,7 @@ void Lastfm::Load() std::string artist = itsArgs.find("artist")->second; locale_to_utf(artist); - std::string file = artist + ".txt"; - lowercase(file); + std::string file = lowercase(artist + ".txt"); removeInvalidCharsFromFilename(file); itsFilename = itsFolder + "/" + file; diff --git a/src/media_library.cpp b/src/media_library.cpp index 498d3882..2156b6bf 100644 --- a/src/media_library.cpp +++ b/src/media_library.cpp @@ -214,8 +214,7 @@ void MediaLibrary::SwitchTo() NextColumn(); if (Config.titles_visibility) { - std::string item_type = tagTypeToString(Config.media_lib_primary_tag); - lowercase(item_type); + std::string item_type = lowercase(tagTypeToString(Config.media_lib_primary_tag)); Albums->setTitle("Albums (sorted by " + item_type + ")"); } else @@ -766,8 +765,7 @@ void MediaLibrary::LocateSong(const MPD::Song &s) } if (primary_tag.empty()) { - std::string item_type = tagTypeToString(Config.media_lib_primary_tag); - lowercase(item_type); + std::string item_type = lowercase(tagTypeToString(Config.media_lib_primary_tag)); ShowMessage("Can't use this function because the song has no %s tag set", item_type.c_str()); return; } @@ -855,8 +853,7 @@ void MediaLibrary::AddToPlaylist(bool add_n_play) if ((!Tags->empty() && w == Tags) || (w == Albums && Albums->current().value().Date == AllTracksMarker)) { - std::string tag_type = tagTypeToString(Config.media_lib_primary_tag); - lowercase(tag_type); + std::string tag_type = lowercase(tagTypeToString(Config.media_lib_primary_tag)); ShowMessage("Songs with %s = \"%s\" added", tag_type.c_str(), Tags->current().value().c_str()); } else if (w == Albums) diff --git a/src/strbuffer.h b/src/strbuffer.h index f56606d2..be32b31c 100644 --- a/src/strbuffer.h +++ b/src/strbuffer.h @@ -234,11 +234,13 @@ template bool basic_buffer::setFormatting( if (s.empty()) return false; bool result = false; - std::basic_string base = m_string; - if (!case_sensitive) + std::basic_string base; + if (case_sensitive) + base = m_string; + else { - lowercase(s); - lowercase(base); + base = lowercase(m_string); + s = lowercase(s); } FormatPos fp; for (size_t i = base.find(s); i != std::basic_string::npos; i = base.find(s, i)) @@ -268,11 +270,13 @@ template void basic_buffer::removeFormatting( { if (pattern.empty()) return; - std::basic_string base = m_string; - if (!case_sensitive) + std::basic_string base; + if (case_sensitive) + base = m_string; + else { - lowercase(pattern); - lowercase(base); + base = lowercase(base); + pattern = lowercase(pattern); } FormatPos fp; for (size_t i = base.find(pattern); i != std::basic_string::npos; i = base.find(pattern, i)) diff --git a/src/tag_editor.cpp b/src/tag_editor.cpp index 9ceb38ec..43da902f 100644 --- a/src/tag_editor.cpp +++ b/src/tag_editor.cpp @@ -1130,10 +1130,7 @@ void LowerAllLetters(MPD::MutableSong &s) { unsigned i = 0; for (std::string tag; !(tag = (s.*m->Get)(i)).empty(); ++i) - { - lowercase(tag); - (s.*m->Set)(tag, i); - } + (s.*m->Set)(ToString(lowercase(ToWString(tag))), i); } } diff --git a/src/tiny_tag_editor.cpp b/src/tiny_tag_editor.cpp index d7fbb6e0..065b2ba2 100644 --- a/src/tiny_tag_editor.cpp +++ b/src/tiny_tag_editor.cpp @@ -189,8 +189,7 @@ bool TinyTagEditor::getTags() itsEdited.setComment(f.tag()->comment().to8Bit(1)); std::string ext = itsEdited.getURI(); - ext = ext.substr(ext.rfind(".")+1); - lowercase(ext); + ext = lowercase(ext.substr(ext.rfind(".")+1)); if (!isInitialized) Init(); diff --git a/src/utility/string.h b/src/utility/string.h index 902d120f..f1f058c5 100644 --- a/src/utility/string.h +++ b/src/utility/string.h @@ -22,6 +22,7 @@ #define _UTILITY_STRING #include +#include #include #include #include "gcc.h" @@ -52,6 +53,16 @@ template struct print { } }; +template +std::basic_string lowercase(std::basic_string s) +{ + std::locale loc; + const std::ctype &ct = std::use_facet< std::ctype >(loc); + for (auto it = s.begin(); it != s.end(); ++it) + *it = ct.tolower(*it); + return s; +} + int stringToInt(const std::string &s); long stringToLongInt(const std::string &s); bool isInteger(const char *s, bool accept_signed); @@ -62,9 +73,6 @@ std::wstring ToWString(const std::string &s); std::vector split(const std::string &s, const std::string &delimiter); void replace(std::string &s, const std::string &from, const std::string &to); -void lowercase(std::string &s); -void lowercase(std::wstring &s); - void trim(std::string &s); std::string getBasename(const std::string &path);