commit 09ea966593100e1d4731766f50fcc9629e74f1e7 Author: Jookia <166291@gmail.com> Date: Wed Dec 12 02:57:47 2012 +1100 Simplied locale_data::parse. diff --git a/libs/locale/src/util/locale_data.cpp b/libs/locale/src/util/locale_data.cpp index b4598a0..1012a7b 100644 --- a/libs/locale/src/util/locale_data.cpp +++ b/libs/locale/src/util/locale_data.cpp @@ -15,95 +15,38 @@ namespace locale { namespace util { void locale_data::parse(std::string const &locale_name) { - language = "C"; + language.clear(); country.clear(); + encoding.clear(); variant.clear(); - encoding = "us-ascii"; - utf8=false; - parse_from_lang(locale_name); - } - - void locale_data::parse_from_lang(std::string const &locale_name) - { - size_t end = locale_name.find_first_of("-_@."); - std::string tmp = locale_name.substr(0,end); - if(tmp.empty()) - return; - for(unsigned i=0;i= locale_name.size()) - return; - - if(locale_name[end] == '-' || locale_name[end]=='_') { - parse_from_country(locale_name.substr(end+1)); - } - else if(locale_name[end] == '.') { - parse_from_encoding(locale_name.substr(end+1)); - } - else if(locale_name[end] == '@') { - parse_from_variant(locale_name.substr(end+1)); - } - } - - void locale_data::parse_from_country(std::string const &locale_name) - { - size_t end = locale_name.find_first_of("@."); - std::string tmp = locale_name.substr(0,end); - if(tmp.empty()) - return; - for(unsigned i=0;i= locale_name.size()) - return; - else if(locale_name[end] == '.') { - parse_from_encoding(locale_name.substr(end+1)); - } - else if(locale_name[end] == '@') { - parse_from_variant(locale_name.substr(end+1)); - } - } - - void locale_data::parse_from_encoding(std::string const &locale_name) - { - size_t end = locale_name.find_first_of("@"); - std::string tmp = locale_name.substr(0,end); - if(tmp.empty()) - return; - for(unsigned i=0;i= locale_name.size()) - return; - - if(locale_name[end] == '@') { - parse_from_variant(locale_name.substr(end+1)); - } - } - - void locale_data::parse_from_variant(std::string const &locale_name) - { - variant = locale_name; - for(unsigned i=0;i(l).language()=="en"); TEST(std::use_facet(l).country()=="US"); TEST(!std::use_facet(l).utf8()); - TEST(std::use_facet(l).encoding()=="iso8859-1"); + TEST(std::use_facet(l).encoding()=="ISO8859-1"); l=g("en_US.UTF-8"); TEST(std::use_facet(l).language()=="en"); @@ -65,13 +65,13 @@ int main() TEST(std::use_facet(l).language()=="en"); TEST(std::use_facet(l).country()=="US"); TEST(!std::use_facet(l).utf8()); - TEST(std::use_facet(l).encoding()=="iso8859-1"); + TEST(std::use_facet(l).encoding()=="ISO8859-1"); l=g("en_US.ISO8859-1"); TEST(std::use_facet(l).language()=="en"); TEST(std::use_facet(l).country()=="US"); TEST(!std::use_facet(l).utf8()); - TEST(std::use_facet(l).encoding()=="iso8859-1"); + TEST(std::use_facet(l).encoding()=="ISO8859-1"); std::locale l_wt(std::locale::classic(),new test_facet);