CppCMS
util.h
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 #ifndef BOOSTER_LOCALE_UTIL_HPP
9 #define BOOSTER_LOCALE_UTIL_HPP
10 #include <locale>
11 #include <typeinfo>
12 #include <booster/cstdint.h>
13 #include <booster/locale/utf.h>
14 #include <booster/locale/generator.h>
15 #include <booster/assert.h>
16 
17 #include <vector>
18 namespace booster {
19 namespace locale {
24 namespace util {
25 
39  BOOSTER_API
40  std::string get_system_locale(bool use_utf8_on_windows = false);
41 
59  BOOSTER_API
60  std::locale create_info(std::locale const &in,std::string const &name);
61 
62 
78  public:
79 
85  static const uint32_t illegal=utf::illegal;
86 
91  static const uint32_t incomplete=utf::incomplete;
92 
93  virtual ~base_converter()
94  {
95  }
100  virtual int max_len() const
101  {
102  return 1;
103  }
113  virtual bool is_thread_safe() const
114  {
115  return false;
116  }
120  virtual base_converter *clone() const
121  {
122  BOOSTER_ASSERT(typeid(*this)==typeid(base_converter));
123  return new base_converter();
124  }
125 
141  virtual uint32_t to_unicode(char const *&begin,char const *end)
142  {
143  if(begin == end)
144  return incomplete;
145  unsigned char cp = *begin;
146  if(cp <= 0x7F) {
147  begin++;
148  return cp;
149  }
150  return illegal;
151  }
163 
164  virtual uint32_t from_unicode(uint32_t u,char *begin,char const *end)
165  {
166  if(begin==end)
167  return incomplete;
168  if(u >= 0x80)
169  return illegal;
170  *begin = static_cast<char>(u);
171  return 1;
172  }
173  };
174 
179  BOOSTER_API std::auto_ptr<base_converter> create_utf8_converter();
187  BOOSTER_API std::auto_ptr<base_converter> create_simple_converter(std::string const &encoding);
188 
189 
201  BOOSTER_API
202  std::locale create_codecvt(std::locale const &in,std::auto_ptr<base_converter> cvt,character_facet_type type);
203 
208  BOOSTER_API
209  std::locale create_utf8_codecvt(std::locale const &in,character_facet_type type);
210 
217  BOOSTER_API
218  std::locale create_simple_codecvt(std::locale const &in,std::string const &encoding,character_facet_type type);
219 } // util
220 } // locale
221 } // boost
222 
223 #endif
224 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
BOOSTER_API std::locale create_info(std::locale const &in, std::string const &name)
Installs information facet to locale in based on locale name name.
BOOSTER_API std::locale create_simple_codecvt(std::locale const &in, std::string const &encoding, character_facet_type type)
This class represent a simple stateless converter from UCS-4 and to UCS-4 for each single code point...
Definition: util.h:77
BOOSTER_API std::auto_ptr< base_converter > create_utf8_converter()
static const code_point incomplete
Special constant that defines incomplete code point.
Definition: utf.h:44
uint32_t character_facet_type
type that specifies the character type that locales can be generated for
Definition: generator.h:43
static const code_point illegal
Special constant that defines illegal code point.
Definition: utf.h:39
BOOSTER_API std::locale create_codecvt(std::locale const &in, std::auto_ptr< base_converter > cvt, character_facet_type type)
This is the main namespace that encloses all localization classes.
Definition: locale_fwd.h:14
BOOSTER_API std::string get_system_locale(bool use_utf8_on_windows=false)
Return default system locale name in POSIX format.
virtual uint32_t to_unicode(char const *&begin, char const *end)
Definition: util.h:141
virtual base_converter * clone() const
Definition: util.h:120
static const uint32_t incomplete
Definition: util.h:91
BOOSTER_API std::locale create_utf8_codecvt(std::locale const &in, character_facet_type type)
virtual uint32_t from_unicode(uint32_t u, char *begin, char const *end)
Definition: util.h:164
static const uint32_t illegal
Definition: util.h:85
BOOSTER_API std::auto_ptr< base_converter > create_simple_converter(std::string const &encoding)
virtual bool is_thread_safe() const
Definition: util.h:113
Booster library namespace. The library that implements Boost Like API in ABI backward compatible way...
Definition: application.h:23
virtual int max_len() const
Definition: util.h:100