diff options
author | Andrzej Rybczak <electricityispower@gmail.com> | 2012-10-05 20:50:14 +0200 |
---|---|---|
committer | Andrzej Rybczak <electricityispower@gmail.com> | 2012-10-05 20:58:07 +0200 |
commit | 044464962c9ccbf9ff017379e67724ce58553b60 (patch) | |
tree | 5c4ac5252f73bc32c3670170a99d2903d00121fb /src | |
parent | e40edade0e005a28f7db0a7e6dc51a2acb734aae (diff) |
initial restoration of support for encodings different than utf-8
Diffstat (limited to 'src')
-rw-r--r-- | src/charset.cpp | 30 | ||||
-rw-r--r-- | src/charset.h | 3 | ||||
-rw-r--r-- | src/display.cpp | 32 | ||||
-rw-r--r-- | src/display.h | 10 | ||||
-rw-r--r-- | src/helpers.h | 2 | ||||
-rw-r--r-- | src/media_library.cpp | 31 | ||||
-rw-r--r-- | src/ncmpcpp.cpp | 4 | ||||
-rw-r--r-- | src/outputs.cpp | 5 | ||||
-rw-r--r-- | src/playlist_editor.cpp | 4 | ||||
-rw-r--r-- | src/search_engine.cpp | 2 | ||||
-rw-r--r-- | src/search_engine.h | 94 | ||||
-rw-r--r-- | src/sel_items_adder.cpp | 3 | ||||
-rw-r--r-- | src/sort_playlist.cpp | 3 | ||||
-rw-r--r-- | src/tag_editor.cpp | 16 | ||||
-rw-r--r-- | src/tiny_tag_editor.cpp | 4 | ||||
-rw-r--r-- | src/utility/comparators.cpp | 2 |
16 files changed, 135 insertions, 110 deletions
diff --git a/src/charset.cpp b/src/charset.cpp index 2d0f8569..92b3f425 100644 --- a/src/charset.cpp +++ b/src/charset.cpp @@ -18,12 +18,32 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include <boost/locale/encoding.hpp> +#include <boost/locale.hpp> #include "charset.h" #include "settings.h" namespace Charset {// +std::locale internalLocale() +{ + boost::locale::generator gen; + std::locale loc = gen(""); + bool is_utf = std::use_facet<boost::locale::info>(loc).utf8(); + std::string name = std::use_facet<boost::locale::info>(loc).name(); + if (!is_utf && name != "C" && name != "POSIX") + { + // if current locale does not use unicode, use variant of this + // locale with utf8 as ncmpcpp uses utf8 internally and we need + // current locale for sorting, case conversions etc. + std::string new_name = std::use_facet<boost::locale::info>(loc).language() + + "_" + + std::use_facet<boost::locale::info>(loc).country() + + ".UTF-8"; + loc = gen(new_name); + } + return loc; +} + std::string toUtf8From(std::string s, const char *charset) { return boost::locale::conv::to_utf<char>(s, charset); @@ -37,15 +57,15 @@ std::string fromUtf8To(std::string s, const char *charset) std::string utf8ToLocale(std::string s) { return Config.system_encoding.empty() - ? s - : boost::locale::conv::from_utf<char>(s, Config.system_encoding); + ? s + : boost::locale::conv::from_utf<char>(s, Config.system_encoding); } std::string localeToUtf8(std::string s) { return Config.system_encoding.empty() - ? s - : boost::locale::conv::to_utf<char>(s, Config.system_encoding); + ? s + : boost::locale::conv::to_utf<char>(s, Config.system_encoding); } } diff --git a/src/charset.h b/src/charset.h index 99188dc5..a5f0d35a 100644 --- a/src/charset.h +++ b/src/charset.h @@ -21,10 +21,13 @@ #ifndef NCMPCPP_CHARSET_H #define NCMPCPP_CHARSET_H +#include <locale> #include <string> namespace Charset {// +std::locale internalLocale(); + std::string toUtf8From(std::string s, const char *charset); std::string fromUtf8To(std::string s, const char *charset); diff --git a/src/display.cpp b/src/display.cpp index 835d15c7..aedea727 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -21,6 +21,7 @@ #include <cassert> #include "browser.h" +#include "charset.h" #include "display.h" #include "helpers.h" #include "song_info.h" @@ -108,7 +109,7 @@ void showSongs(NC::Menu<T> &menu, const MPD::Song &s, const ProxySongList &pl, c setProperties(menu, s, pl, separate_albums, is_now_playing, is_selected, discard_colors); size_t y = menu.getY(); - std::string line = s.toString(format, Config.tags_separator, "$"); + std::string line = Charset::utf8ToLocale(s.toString(format, Config.tags_separator, "$")); for (auto it = line.begin(); it != line.end(); ++it) { if (*it == '$') @@ -222,7 +223,8 @@ void showSongsInColumns(NC::Menu<T> &menu, const MPD::Song &s, const ProxySongLi for (size_t i = 0; i < it->type.length(); ++i) { MPD::Song::GetFunction get = charToGetFunction(it->type[i]); - tag = ToWString(get ? s.getTags(get, Config.tags_separator) : ""); + assert(get); + tag = ToWString(Charset::utf8ToLocale(s.getTags(get, Config.tags_separator))); if (!tag.empty()) break; } @@ -326,11 +328,11 @@ std::string Display::Columns(size_t list_width) if (it->right_alignment) { result += std::string(x_off, KEY_SPACE); - result += ToString(name); + result += Charset::utf8ToLocale(ToString(name)); } else { - result += ToString(name); + result += Charset::utf8ToLocale(ToString(name)); result += std::string(x_off, KEY_SPACE); } @@ -364,30 +366,29 @@ void Display::Tags(NC::Menu<MPD::MutableSong> &menu) size_t i = myTagEditor->TagTypes->choice(); if (i < 11) { - ShowTag(menu, s.getTags(SongInfo::Tags[i].Get, Config.tags_separator)); + ShowTag(menu, Charset::utf8ToLocale(s.getTags(SongInfo::Tags[i].Get, Config.tags_separator))); } else if (i == 12) { if (s.getNewURI().empty()) - menu << s.getName(); + menu << Charset::utf8ToLocale(s.getName()); else - menu << s.getName() << Config.color2 << " -> " << NC::clEnd << s.getNewURI(); + menu << Charset::utf8ToLocale(s.getName()) + << Config.color2 << " -> " << NC::clEnd + << Charset::utf8ToLocale(s.getNewURI()); } } #endif // HAVE_TAGLIB_H -void Display::Outputs(NC::Menu<MPD::Output> &menu) -{ - menu << menu.drawn()->value().name(); -} - void Display::Items(NC::Menu<MPD::Item> &menu, const ProxySongList &pl) { const MPD::Item &item = menu.drawn()->value(); switch (item.type) { case MPD::itDirectory: - menu << "[" << getBasename(item.name) << "]"; + menu << "[" + << Charset::utf8ToLocale(getBasename(item.name)) + << "]"; break; case MPD::itSong: if (!Config.columns_in_browser) @@ -396,12 +397,13 @@ void Display::Items(NC::Menu<MPD::Item> &menu, const ProxySongList &pl) showSongsInColumns(menu, *item.song, pl); break; case MPD::itPlaylist: - menu << Config.browser_playlist_prefix << getBasename(item.name); + menu << Config.browser_playlist_prefix + << Charset::utf8ToLocale(getBasename(item.name)); break; } } -void Display::SearchEngine(NC::Menu<SEItem> &menu, const ProxySongList &pl) +void Display::SEItems(NC::Menu<SEItem> &menu, const ProxySongList &pl) { const SEItem &si = menu.drawn()->value(); if (si.isSong()) diff --git a/src/display.h b/src/display.h index 93447473..0f8c444f 100644 --- a/src/display.h +++ b/src/display.h @@ -30,21 +30,13 @@ namespace Display {// std::string Columns(size_t); -template <typename ItemT> -void Default(NC::Menu<ItemT> &menu) { menu << menu.drawn()->value(); } - -template <typename A, typename B> -void Pair(NC::Menu< std::pair<A, B> > &menu) { menu << menu.drawn()->value().first; } - void SongsInColumns(NC::Menu<MPD::Song> &menu, const ProxySongList &pl); void Songs(NC::Menu<MPD::Song> &menu, const ProxySongList &pl, const std::string &format); void Tags(NC::Menu<MPD::MutableSong> &menu); -void Outputs(NC::Menu<MPD::Output> &menu); - -void SearchEngine(NC::Menu<SEItem> &menu, const ProxySongList &pl); +void SEItems(NC::Menu<SEItem> &menu, const ProxySongList &pl); void Items(NC::Menu<MPD::Item> &menu, const ProxySongList &pl); diff --git a/src/helpers.h b/src/helpers.h index b70a0f7b..dafe2e09 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -473,7 +473,7 @@ template <typename T> void ShowTime(T &buf, size_t length, bool short_names) buf << length << cnv(short_names ? "s" : (length == 1 ? " second" : " seconds")); } -template <typename T> void ShowTag(T &buf, const std::string &tag) +template <typename BufferT> void ShowTag(BufferT &buf, const std::string &tag) { if (tag.empty()) buf << Config.empty_tags_color << Config.empty_tag << NC::clEnd; diff --git a/src/media_library.cpp b/src/media_library.cpp index afddae46..00a45934 100644 --- a/src/media_library.cpp +++ b/src/media_library.cpp @@ -64,9 +64,6 @@ bool TagEntryMatcher(const Regex &rx, const MediaLibrary::PrimaryTag &tagmtime); bool AlbumEntryMatcher(const Regex &rx, const NC::Menu<AlbumEntry>::Item &item, bool filter); bool SongEntryMatcher(const Regex &rx, const MPD::Song &s); -void DisplayAlbums(NC::Menu<AlbumEntry> &menu); -void DisplayPrimaryTags(NC::Menu<MediaLibrary::PrimaryTag> &menu); - struct SortSongs { static const std::array<MPD::Song::GetFunction, 3> GetFuns; @@ -156,7 +153,13 @@ MediaLibrary::MediaLibrary() Tags.centeredCursor(Config.centered_cursor); Tags.setSelectedPrefix(Config.selected_item_prefix); Tags.setSelectedSuffix(Config.selected_item_suffix); - Tags.setItemDisplayer(DisplayPrimaryTags); + Tags.setItemDisplayer([](NC::Menu<PrimaryTag> &menu) { + const std::string &tag = menu.drawn()->value().tag(); + if (tag.empty()) + menu << Config.empty_tag; + else + menu << Charset::utf8ToLocale(tag); + }); Albums = NC::Menu<AlbumEntry>(itsMiddleColStartX, MainStartY, itsMiddleColWidth, MainHeight, Config.titles_visibility ? "Albums" : "", Config.main_color, NC::brNone); Albums.setHighlightColor(Config.main_highlight_color); @@ -164,7 +167,9 @@ MediaLibrary::MediaLibrary() Albums.centeredCursor(Config.centered_cursor); Albums.setSelectedPrefix(Config.selected_item_prefix); Albums.setSelectedSuffix(Config.selected_item_suffix); - Albums.setItemDisplayer(DisplayAlbums); + Albums.setItemDisplayer([](NC::Menu<AlbumEntry> &menu) { + menu << Charset::utf8ToLocale(AlbumToString(menu.drawn()->value())); + }); Songs = NC::Menu<MPD::Song>(itsRightColStartX, MainStartY, itsRightColWidth, MainHeight, Config.titles_visibility ? "Songs" : "", Config.main_color, NC::brNone); Songs.setHighlightColor(Config.main_highlight_color); @@ -1033,20 +1038,4 @@ bool SongEntryMatcher(const Regex &rx, const MPD::Song &s) return rx.match(SongToString(s)); } -/***********************************************************************/ - -void DisplayAlbums(NC::Menu<AlbumEntry> &menu) -{ - menu << AlbumToString(menu.drawn()->value()); -} - -void DisplayPrimaryTags(NC::Menu<MediaLibrary::PrimaryTag> &menu) -{ - const std::string &tag = menu.drawn()->value().tag(); - if (tag.empty()) - menu << Config.empty_tag; - else - menu << tag; -} - } diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index f09b65c5..26b8871f 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -24,6 +24,7 @@ #include <cstring> #include <sys/time.h> +#include <boost/locale.hpp> #include <iostream> #include <fstream> #include <stdexcept> @@ -33,6 +34,7 @@ #include "actions.h" #include "bindings.h" #include "browser.h" +#include "charset.h" #include "cmdargs.h" #include "global.h" #include "helpers.h" @@ -91,7 +93,7 @@ int main(int argc, char **argv) std::srand(std::time(0)); std::setlocale(LC_ALL, ""); - std::locale::global(std::locale("")); + std::locale::global(Charset::internalLocale()); Config.CheckForCommandLineConfigFilePath(argv, argc); diff --git a/src/outputs.cpp b/src/outputs.cpp index 18741c2e..b8dfbd9f 100644 --- a/src/outputs.cpp +++ b/src/outputs.cpp @@ -22,6 +22,7 @@ #ifdef ENABLE_OUTPUTS +#include "charset.h" #include "display.h" #include "global.h" #include "settings.h" @@ -42,7 +43,9 @@ Outputs::Outputs() w.cyclicScrolling(Config.use_cyclic_scrolling); w.centeredCursor(Config.centered_cursor); w.setHighlightColor(Config.main_highlight_color); - w.setItemDisplayer(Display::Outputs); + w.setItemDisplayer([](NC::Menu<MPD::Output> &menu) { + menu << Charset::utf8ToLocale(menu.drawn()->value().name()); + }); FetchList(); } diff --git a/src/playlist_editor.cpp b/src/playlist_editor.cpp index 0c8e5550..ff6d6e5f 100644 --- a/src/playlist_editor.cpp +++ b/src/playlist_editor.cpp @@ -68,7 +68,9 @@ PlaylistEditor::PlaylistEditor() Playlists.centeredCursor(Config.centered_cursor); Playlists.setSelectedPrefix(Config.selected_item_prefix); Playlists.setSelectedSuffix(Config.selected_item_suffix); - Playlists.setItemDisplayer(Display::Default<std::string>); + Playlists.setItemDisplayer([](NC::Menu<std::string> &menu) { + menu << Charset::utf8ToLocale(menu.drawn()->value()); + }); Content = NC::Menu<MPD::Song>(RightColumnStartX, MainStartY, RightColumnWidth, MainHeight, Config.titles_visibility ? "Playlist content" : "", Config.main_color, NC::brNone); Content.setHighlightColor(Config.main_highlight_color); diff --git a/src/search_engine.cpp b/src/search_engine.cpp index 16b608d5..4689b451 100644 --- a/src/search_engine.cpp +++ b/src/search_engine.cpp @@ -108,7 +108,7 @@ SearchEngine::SearchEngine() w.setHighlightColor(Config.main_highlight_color); w.cyclicScrolling(Config.use_cyclic_scrolling); w.centeredCursor(Config.centered_cursor); - w.setItemDisplayer(std::bind(Display::SearchEngine, _1, proxySongList())); + w.setItemDisplayer(std::bind(Display::SEItems, _1, proxySongList())); w.setSelectedPrefix(Config.selected_item_prefix); w.setSelectedSuffix(Config.selected_item_suffix); SearchMode = &SearchModes[Config.search_engine_default_search_mode]; diff --git a/src/search_engine.h b/src/search_engine.h index 8a5455a7..171307bf 100644 --- a/src/search_engine.h +++ b/src/search_engine.h @@ -27,53 +27,7 @@ #include "mpdpp.h" #include "screen.h" -struct SEItem -{ - SEItem() : isThisSong(false), itsBuffer(0) { } - SEItem(NC::Buffer *buf) : isThisSong(false), itsBuffer(buf) { } - SEItem(const MPD::Song &s) : isThisSong(true), itsSong(s) { } - SEItem(const SEItem &ei) { *this = ei; } - ~SEItem() { - if (!isThisSong) - delete itsBuffer; - } - - NC::Buffer &mkBuffer() { - assert(!isThisSong); - delete itsBuffer; - itsBuffer = new NC::Buffer(); - return *itsBuffer; - } - - bool isSong() const { return isThisSong; } - - NC::Buffer &buffer() { assert(!isThisSong && itsBuffer); return *itsBuffer; } - MPD::Song &song() { assert(isThisSong); return itsSong; } - - const NC::Buffer &buffer() const { assert(!isThisSong && itsBuffer); return *itsBuffer; } - const MPD::Song &song() const { assert(isThisSong); return itsSong; } - - SEItem &operator=(const SEItem &se) { - if (this == &se) - return *this; - isThisSong = se.isThisSong; - if (se.isThisSong) - itsSong = se.itsSong; - else if (se.itsBuffer) - itsBuffer = new NC::Buffer(*se.itsBuffer); - else - itsBuffer = 0; - return *this; - } - - private: - bool isThisSong; - - NC::Buffer *itsBuffer; - MPD::Song itsSong; -}; - -struct SearchEngine: Screen<NC::Menu<SEItem>>, Filterable, HasSongs, Searchable, Tabbable +struct SearchEngine: Screen<NC::Menu<struct SEItem>>, Filterable, HasSongs, Searchable, Tabbable { SearchEngine(); @@ -135,6 +89,52 @@ private: static bool MatchToPattern; }; +struct SEItem +{ + SEItem() : m_is_song(false), m_buffer(0) { } + SEItem(NC::Buffer *buf) : m_is_song(false), m_buffer(buf) { } + SEItem(const MPD::Song &s) : m_is_song(true), m_song(s) { } + SEItem(const SEItem &ei) { *this = ei; } + ~SEItem() { + if (!m_is_song) + delete m_buffer; + } + + NC::Buffer &mkBuffer() { + assert(!m_is_song); + delete m_buffer; + m_buffer = new NC::Buffer(); + return *m_buffer; + } + + bool isSong() const { return m_is_song; } + + NC::Buffer &buffer() { assert(!m_is_song && m_buffer); return *m_buffer; } + MPD::Song &song() { assert(m_is_song); return m_song; } + + const NC::Buffer &buffer() const { assert(!m_is_song && m_buffer); return *m_buffer; } + const MPD::Song &song() const { assert(m_is_song); return m_song; } + + SEItem &operator=(const SEItem &se) { + if (this == &se) + return *this; + m_is_song = se.m_is_song; + if (se.m_is_song) + m_song = se.m_song; + else if (se.m_buffer) + m_buffer = new NC::Buffer(*se.m_buffer); + else + m_buffer = 0; + return *this; + } + +private: + bool m_is_song; + + NC::Buffer *m_buffer; + MPD::Song m_song; +}; + extern SearchEngine *mySearcher; #endif // NCMPCPP_SEARCH_ENGINE_H diff --git a/src/sel_items_adder.cpp b/src/sel_items_adder.cpp index ec275992..4b998584 100644 --- a/src/sel_items_adder.cpp +++ b/src/sel_items_adder.cpp @@ -30,6 +30,7 @@ #include "statusbar.h" #include "utility/comparators.h" #include "screen_switcher.h" +#include "charset.h" SelectedItemsAdder *mySelectedItemsAdder; @@ -37,7 +38,7 @@ namespace {// void DisplayComponent(SelectedItemsAdder::Component &menu) { - menu << menu.drawn()->value().item(); + menu << Charset::utf8ToLocale(menu.drawn()->value().item()); } } diff --git a/src/sort_playlist.cpp b/src/sort_playlist.cpp index 2ccb8870..0e555921 100644 --- a/src/sort_playlist.cpp +++ b/src/sort_playlist.cpp @@ -18,6 +18,7 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include "charset.h" #include "display.h" #include "global.h" #include "helpers.h" @@ -43,7 +44,7 @@ SortPlaylistDialog::SortPlaylistDialog() w.cyclicScrolling(Config.use_cyclic_scrolling); w.centeredCursor(Config.centered_cursor); w.setItemDisplayer([](Self::WindowType &menu) { - menu << menu.drawn()->value().item().first; + menu << Charset::utf8ToLocale(menu.drawn()->value().item().first); }); w.addItem(Entry(std::make_pair("Artist", &MPD::Song::getArtist), diff --git a/src/tag_editor.cpp b/src/tag_editor.cpp index 2fea1ed0..e0fbd647 100644 --- a/src/tag_editor.cpp +++ b/src/tag_editor.cpp @@ -94,13 +94,17 @@ TagEditor::TagEditor() : FParser(0), FParserHelper(0), FParserLegend(0), FParser Dirs->setHighlightColor(Config.active_column_color); Dirs->cyclicScrolling(Config.use_cyclic_scrolling); Dirs->centeredCursor(Config.centered_cursor); - Dirs->setItemDisplayer(Display::Pair<std::string, std::string>); + Dirs->setItemDisplayer([](NC::Menu<std::pair<std::string, std::string>> &menu) { + menu << Charset::utf8ToLocale(menu.drawn()->value().first); + }); TagTypes = new NC::Menu<std::string>(MiddleColumnStartX, MainStartY, MiddleColumnWidth, MainHeight, Config.titles_visibility ? "Tag types" : "", Config.main_color, NC::brNone); TagTypes->setHighlightColor(Config.main_highlight_color); TagTypes->cyclicScrolling(Config.use_cyclic_scrolling); TagTypes->centeredCursor(Config.centered_cursor); - TagTypes->setItemDisplayer(Display::Default<std::string>); + TagTypes->setItemDisplayer([](NC::Menu<std::string> &menu) { + menu << Charset::utf8ToLocale(menu.drawn()->value()); + }); for (const SongInfo::Metadata *m = SongInfo::Tags; m->Name; ++m) TagTypes->addItem(m->Name); @@ -124,10 +128,14 @@ TagEditor::TagEditor() : FParser(0), FParserHelper(0), FParserLegend(0), FParser Tags->setSelectedSuffix(Config.selected_item_suffix); Tags->setItemDisplayer(Display::Tags); + auto parser_display = [](NC::Menu<std::string> &menu) { + menu << Charset::utf8ToLocale(menu.drawn()->value()); + }; + FParserDialog = new NC::Menu<std::string>((COLS-FParserDialogWidth)/2, (MainHeight-FParserDialogHeight)/2+MainStartY, FParserDialogWidth, FParserDialogHeight, "", Config.main_color, Config.window_border); FParserDialog->cyclicScrolling(Config.use_cyclic_scrolling); FParserDialog->centeredCursor(Config.centered_cursor); - FParserDialog->setItemDisplayer(Display::Default<std::string>); + FParserDialog->setItemDisplayer(parser_display); FParserDialog->addItem("Get tags from filename"); FParserDialog->addItem("Rename files"); FParserDialog->addSeparator(); @@ -136,7 +144,7 @@ TagEditor::TagEditor() : FParser(0), FParserHelper(0), FParserLegend(0), FParser FParser = new NC::Menu<std::string>((COLS-FParserWidth)/2, (MainHeight-FParserHeight)/2+MainStartY, FParserWidthOne, FParserHeight, "_", Config.main_color, Config.active_window_border); FParser->cyclicScrolling(Config.use_cyclic_scrolling); FParser->centeredCursor(Config.centered_cursor); - FParser->setItemDisplayer(Display::Default<std::string>); + FParser->setItemDisplayer(parser_display); FParserLegend = new NC::Scrollpad((COLS-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY, FParserWidthTwo, FParserHeight, "Legend", Config.main_color, Config.window_border); diff --git a/src/tiny_tag_editor.cpp b/src/tiny_tag_editor.cpp index 1cc20334..5112d107 100644 --- a/src/tiny_tag_editor.cpp +++ b/src/tiny_tag_editor.cpp @@ -51,7 +51,9 @@ TinyTagEditor::TinyTagEditor() w.setHighlightColor(Config.main_highlight_color); w.cyclicScrolling(Config.use_cyclic_scrolling); w.centeredCursor(Config.centered_cursor); - w.setItemDisplayer(Display::Default<NC::Buffer>); + w.setItemDisplayer([](NC::Menu<NC::Buffer> &menu) { + menu << menu.drawn()->value(); + }); } void TinyTagEditor::resize() diff --git a/src/utility/comparators.cpp b/src/utility/comparators.cpp index 0420b006..e6c8fd32 100644 --- a/src/utility/comparators.cpp +++ b/src/utility/comparators.cpp @@ -46,7 +46,7 @@ int LocaleStringComparison::operator()(const std::string &a, const std::string & if (hasTheWord(b)) bc_off += 4; } - return std::use_facet< std::collate<char> >(m_locale).compare( + return std::use_facet<std::collate<char>>(m_locale).compare( ac+ac_off, ac+a.length(), bc+bc_off, bc+b.length() ); } |