diff --git a/concordia-console/CMakeLists.txt b/concordia-console/CMakeLists.txt index 424022e..452ab39 100644 --- a/concordia-console/CMakeLists.txt +++ b/concordia-console/CMakeLists.txt @@ -1,7 +1,7 @@ add_executable(concordia-console concordia-console.cpp) -target_link_libraries(concordia-console concordia ${Boost_LIBRARIES} ${LIBCONFIG_LIB} ${LIBSTEMMER_LIB}) +target_link_libraries(concordia-console concordia utf8case ${Boost_LIBRARIES} ${LIBCONFIG_LIB} ${LIBSTEMMER_LIB}) if (WITH_RE2) target_link_libraries(concordia-console re2) diff --git a/concordia/common/text_utils.cpp b/concordia/common/text_utils.cpp index c38bc02..699ad93 100644 --- a/concordia/common/text_utils.cpp +++ b/concordia/common/text_utils.cpp @@ -3,27 +3,17 @@ #include #include - -using namespace boost::locale; +TextUtils::TextUtils() { + _lowerConverter = + StringCaseConverterManager::getInstance().getLowerCaseConverter("pl"); + _upperConverter = + StringCaseConverterManager::getInstance().getUpperCaseConverter("pl"); +} string TextUtils::toLowerCase(const string & text) { - generator gen; - locale loc=gen("pl_PL.UTF-8"); - locale::global(loc); - cout.imbue(loc); - - string result = text; - boost::locale::to_lower(result); - return result; + return simpleConvert(*_lowerConverter, text); } string TextUtils::toUpperCase(const string & text) { - generator gen; - locale loc=gen("pl_PL.UTF-8"); - locale::global(loc); - cout.imbue(loc); - - string result = text; - boost::locale::to_upper(result); - return result; + return simpleConvert(*_upperConverter, text); } diff --git a/concordia/common/text_utils.hpp b/concordia/common/text_utils.hpp index 0c6d1b4..acc4d16 100644 --- a/concordia/common/text_utils.hpp +++ b/concordia/common/text_utils.hpp @@ -2,6 +2,10 @@ #define TEXT_UTILS_HDR #include +#include +#include "utf8case/simple_convert.hpp" +#include "utf8case/case_converter_factory.hpp" +#include "utf8case/string_case_converter_manager.hpp" using namespace std; @@ -10,21 +14,34 @@ using namespace std; */ class TextUtils { public: + TextUtils(); + + static TextUtils & getInstance() { + static TextUtils instance; // Guaranteed to be destroyed. + // Instantiated on first use. + return instance; + } /*! A method for converting all string letters to lower case. \param text input string \returns lower case version of the input string. */ - static string toLowerCase(const string & text); + string toLowerCase(const string & text); /*! A method for converting all string letters to upper case. \param text input string \returns upper case version of the input string. */ - static string toUpperCase(const string & text); + string toUpperCase(const string & text); private: + TextUtils(TextUtils const&); // Don't Implement + void operator=(TextUtils const&); // Don't implement + + boost::shared_ptr _lowerConverter; + + boost::shared_ptr _upperConverter; }; #endif diff --git a/concordia/t/test_text_utils.cpp b/concordia/t/test_text_utils.cpp index fdfa6c3..fa62d9b 100644 --- a/concordia/t/test_text_utils.cpp +++ b/concordia/t/test_text_utils.cpp @@ -9,13 +9,13 @@ BOOST_AUTO_TEST_SUITE(text_utils) BOOST_AUTO_TEST_CASE( ToLower ) { string str = "ZAŻÓŁĆ GĘŚLĄ JAŹŃ"; - BOOST_CHECK_EQUAL(TextUtils::toLowerCase(str),"zażółć gęślą jaźń"); + BOOST_CHECK_EQUAL(TextUtils::getInstance().toLowerCase(str),"zażółć gęślą jaźń"); } BOOST_AUTO_TEST_CASE( ToUpper ) { string str = "zażółć gęślą jaźń"; - BOOST_CHECK_EQUAL(TextUtils::toUpperCase(str),"ZAŻÓŁĆ GĘŚLĄ JAŹŃ"); + BOOST_CHECK_EQUAL(TextUtils::getInstance().toUpperCase(str),"ZAŻÓŁĆ GĘŚLĄ JAŹŃ"); } BOOST_AUTO_TEST_SUITE_END()