1 // 2 // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) 3 // 4 // Distributed under the Boost Software License, Version 1.0. (See 5 // accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // 8 #include <boost/locale.hpp> 9 #include <boost/algorithm/string/case_conv.hpp> 10 #include <iostream> 11 12 #include <ctime> 13 14 15 main()16int main() 17 { 18 using namespace boost::locale; 19 using namespace std; 20 // Create system default locale 21 generator gen; 22 locale loc=gen(""); 23 locale::global(loc); 24 cout.imbue(loc); 25 26 27 cout<<"Correct case conversion can't be done by simple, character by character conversion"<<endl; 28 cout<<"because case conversion is context sensitive and not 1-to-1 conversion"<<endl; 29 cout<<"For example:"<<endl; 30 cout<<" German grüßen correctly converted to "<<to_upper("grüßen")<<", instead of incorrect " 31 <<boost::to_upper_copy(std::string("grüßen"))<<endl; 32 cout<<" where ß is replaced with SS"<<endl; 33 cout<<" Greek ὈΔΥΣΣΕΎΣ is correctly converted to "<<to_lower("ὈΔΥΣΣΕΎΣ")<<", instead of incorrect " 34 <<boost::to_lower_copy(std::string("ὈΔΥΣΣΕΎΣ"))<<endl; 35 cout<<" where Σ is converted to σ or to ς, according to position in the word"<<endl; 36 cout<<"Such type of conversion just can't be done using std::toupper that work on character base, also std::toupper is "<<endl; 37 cout<<"not even applicable when working with variable character length like in UTF-8 or UTF-16 limiting the correct "<<endl; 38 cout<<"behavior to unicode subset BMP or ASCII only"<<endl; 39 40 } 41 42 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 43 44 // boostinspect:noascii 45