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_LOCLAE_GNU_GETTEXT_HPP 00009 #define BOOSTER_LOCLAE_GNU_GETTEXT_HPP 00010 00011 #include <booster/locale/message.h> 00012 #include <booster/function.h> 00013 #include <booster/backtrace.h> 00014 00015 namespace booster { 00016 namespace locale { 00019 00020 00024 namespace gnu_gettext { 00025 00034 struct messages_info { 00035 messages_info() : 00036 language("C"), 00037 locale_category("LC_MESSAGES") 00038 { 00039 } 00040 00041 std::string language; 00042 std::string country; 00043 std::string variant; 00044 std::string encoding; 00045 00046 std::string locale_category; 00047 00048 00049 00050 00051 00052 00053 00054 00055 struct domain { 00056 00057 std::string name; 00058 std::string encoding; 00059 domain() {} 00066 domain(std::string const &n) 00067 { 00068 size_t pos = n.find("/"); 00069 if(pos==std::string::npos) { 00070 name = n; 00071 encoding = "UTF-8"; 00072 } 00073 else { 00074 name = n.substr(0,pos); 00075 encoding = n.substr(pos+1); 00076 } 00077 00078 } 00079 00083 bool operator==(domain const &other) const 00084 { 00085 return name==other.name; 00086 } 00090 bool operator!=(domain const &other) const 00091 { 00092 return !(*this==other); 00093 } 00094 00095 }; 00096 00097 typedef std::vector<domain> domains_type; 00098 00099 domains_type domains; 00100 00101 std::vector<std::string> paths; 00102 00103 00114 typedef function< 00115 std::vector<char>( 00116 std::string const &file_name, 00117 std::string const &encoding 00118 ) 00119 > callback_type; 00120 00125 callback_type callback; 00126 00127 }; 00128 00133 00134 template<typename CharType> 00135 message_format<CharType> *create_messages_facet(messages_info const &info); 00136 00138 00139 template<> 00140 BOOSTER_API message_format<char> *create_messages_facet(messages_info const &info); 00141 00142 template<> 00143 BOOSTER_API message_format<wchar_t> *create_messages_facet(messages_info const &info); 00144 00145 #ifdef BOOSTER_HAS_CHAR16_T 00146 template<> 00147 BOOSTER_API message_format<char16_t> *create_messages_facet(messages_info const &info); 00148 #endif 00149 00150 #ifdef BOOSTER_HAS_CHAR32_T 00151 template<> 00152 BOOSTER_API message_format<char32_t> *create_messages_facet(messages_info const &info); 00153 #endif 00154 00156 00157 } // gnu_gettext 00158 00160 00161 } // locale 00162 } // boost 00163 00164 #endif 00165 00166 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 00167