CppCMS
|
00001 // 00002 // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) 00003 // 00004 // Distributed under the Boost Software License, Version 1.0. (See 00005 // accompanying file LICENSE_1_0.txt or copy at 00006 // http://www.boost.org/LICENSE_1_0.txt) 00007 // 00008 #ifndef BOOSTER_LOCALE_GENERATOR_HPP 00009 #define BOOSTER_LOCALE_GENERATOR_HPP 00010 #include <booster/config.h> 00011 #include <booster/cstdint.h> 00012 #ifdef BOOSTER_MSVC 00013 # pragma warning(push) 00014 # pragma warning(disable : 4275 4251 4231 4660) 00015 #endif 00016 #include <string> 00017 #include <locale> 00018 #include <memory> 00019 00020 namespace booster { 00021 00022 template<typename Type> 00023 class shared_ptr; 00024 00028 namespace locale { 00029 00030 class localization_backend; 00031 class localization_backend_manager; 00032 00033 static const uint32_t nochar_facet = 0; 00034 static const uint32_t char_facet = 1 << 0; 00035 static const uint32_t wchar_t_facet = 1 << 1; 00036 static const uint32_t char16_t_facet = 1 << 2; 00037 static const uint32_t char32_t_facet = 1 << 3; 00038 00039 static const uint32_t character_first_facet = char_facet; 00040 static const uint32_t character_last_facet = char32_t_facet; 00041 static const uint32_t all_characters = 0xFFFF; 00042 00043 typedef uint32_t character_facet_type; 00044 00045 static const uint32_t convert_facet = 1 << 0; 00046 static const uint32_t collation_facet = 1 << 1; 00047 static const uint32_t formatting_facet= 1 << 2; 00048 static const uint32_t parsing_facet = 1 << 3; 00049 static const uint32_t message_facet = 1 << 4; 00050 static const uint32_t codepage_facet = 1 << 5; 00051 static const uint32_t boundary_facet = 1 << 6; 00052 00053 static const uint32_t per_character_facet_first = convert_facet; 00054 static const uint32_t per_character_facet_last = boundary_facet; 00055 00056 static const uint32_t calendar_facet = 1 << 16; 00057 static const uint32_t information_facet = 1 << 17; 00058 00059 static const uint32_t non_character_facet_first = calendar_facet; 00060 static const uint32_t non_character_facet_last = information_facet; 00061 00062 00063 static const uint32_t all_categories = 0xFFFFFFFFu; 00064 00065 typedef uint32_t locale_category_type; 00066 00073 00074 class BOOSTER_API generator { 00075 public: 00076 00080 generator(); 00084 generator(localization_backend_manager const &); 00085 00086 ~generator(); 00087 00091 void categories(locale_category_type cats); 00095 locale_category_type categories() const; 00096 00100 void characters(character_facet_type chars); 00104 character_facet_type characters() const; 00105 00126 void add_messages_domain(std::string const &domain); 00131 void set_default_messages_domain(std::string const &domain); 00132 00136 void clear_domains(); 00137 00152 void add_messages_path(std::string const &path); 00153 00157 void clear_paths(); 00158 00162 void clear_cache(); 00163 00167 void locale_cache_enabled(bool on); 00168 00172 bool locale_cache_enabled() const; 00173 00177 bool use_ansi_encoding() const; 00178 00186 void use_ansi_encoding(bool enc); 00187 00191 std::locale generate(std::string const &id) const; 00196 std::locale generate(std::locale const &base,std::string const &id) const; 00200 std::locale operator()(std::string const &id) const 00201 { 00202 return generate(id); 00203 } 00204 00208 void set_option(std::string const &name,std::string const &value); 00209 00213 void clear_options(); 00214 00215 private: 00216 00217 void set_all_options(shared_ptr<localization_backend> backend,std::string const &id) const; 00218 00219 generator(generator const &); 00220 void operator=(generator const &); 00221 00222 struct data; 00223 std::auto_ptr<data> d; 00224 }; 00225 00226 } 00227 } 00228 #ifdef BOOSTER_MSVC 00229 #pragma warning(pop) 00230 #endif 00231 00232 00233 #endif 00234 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 00235