You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
125 lines
3.5 KiB
125 lines
3.5 KiB
// |
|
// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) |
|
// |
|
// Distributed under the Boost Software License, Version 1.0. (See |
|
// accompanying file LICENSE_1_0.txt or copy at |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
// |
|
#ifndef BOOST_LOCALE_INFO_HPP_INCLUDED |
|
#define BOOST_LOCALE_INFO_HPP_INCLUDED |
|
#include <boost/locale/config.hpp> |
|
#ifdef BOOST_MSVC |
|
# pragma warning(push) |
|
# pragma warning(disable : 4275 4251 4231 4660) |
|
#endif |
|
#include <locale> |
|
#include <string> |
|
|
|
|
|
namespace boost { |
|
namespace locale { |
|
|
|
/// |
|
/// \brief a facet that holds general information about locale |
|
/// |
|
/// This facet should be always created in order to make all Boost.Locale functions work |
|
/// |
|
class BOOST_LOCALE_DECL info : public std::locale::facet |
|
{ |
|
public: |
|
static std::locale::id id; ///< This member uniquely defines this facet, required by STL |
|
|
|
/// |
|
/// String information about the locale |
|
/// |
|
enum string_propery { |
|
language_property, ///< ISO 639 language id |
|
country_property, ///< ISO 3166 country id |
|
variant_property, ///< Variant for locale |
|
encoding_property, ///< encoding name |
|
name_property ///< locale name |
|
}; |
|
|
|
/// |
|
/// Integer information about locale |
|
/// |
|
enum integer_property { |
|
utf8_property ///< Non zero value if uses UTF-8 encoding |
|
}; |
|
|
|
|
|
/// |
|
/// Standard facet's constructor |
|
/// |
|
info(size_t refs = 0) : std::locale::facet(refs) |
|
{ |
|
} |
|
/// |
|
/// Get language name |
|
/// |
|
std::string language() const |
|
{ |
|
return get_string_property(language_property); |
|
} |
|
/// |
|
/// Get country name |
|
/// |
|
std::string country() const |
|
{ |
|
return get_string_property(country_property); |
|
} |
|
/// |
|
/// Get locale variant |
|
/// |
|
std::string variant() const |
|
{ |
|
return get_string_property(variant_property); |
|
} |
|
/// |
|
/// Get encoding |
|
/// |
|
std::string encoding() const |
|
{ |
|
return get_string_property(encoding_property); |
|
} |
|
|
|
/// |
|
/// Get the name of the locale, like en_US.UTF-8 |
|
/// |
|
std::string name() const |
|
{ |
|
return get_string_property(name_property); |
|
} |
|
|
|
/// |
|
/// True if the underlying encoding is UTF-8 (for char streams and strings) |
|
/// |
|
bool utf8() const |
|
{ |
|
return get_integer_property(utf8_property) != 0; |
|
} |
|
|
|
#if defined (__SUNPRO_CC) && defined (_RWSTD_VER) |
|
std::locale::id& __get_id (void) const { return id; } |
|
#endif |
|
protected: |
|
/// |
|
/// Get string property by its id \a v |
|
/// |
|
virtual std::string get_string_property(string_propery v) const = 0; |
|
/// |
|
/// Get integer property by its id \a v |
|
/// |
|
virtual int get_integer_property(integer_property v) const = 0; |
|
}; |
|
|
|
} |
|
} |
|
|
|
#ifdef BOOST_MSVC |
|
#pragma warning(pop) |
|
#endif |
|
|
|
#endif |
|
|
|
// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
|
|
|