| // |
| // 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_GENERATOR_HPP |
| #define BOOST_LOCALE_GENERATOR_HPP |
| #include <boost/locale/config.hpp> |
| #include <boost/cstdint.hpp> |
| #ifdef BOOST_MSVC |
| # pragma warning(push) |
| # pragma warning(disable : 4275 4251 4231 4660) |
| #endif |
| #include <string> |
| #include <locale> |
| #include <memory> |
| |
| namespace boost { |
| |
| template<typename Type> |
| class shared_ptr; |
| |
| /// |
| /// \brief This is the main namespace that encloses all localization classes |
| /// |
| namespace locale { |
| |
| class localization_backend; |
| class localization_backend_manager; |
| |
| static const uint32_t nochar_facet = 0; ///< Unspecified character category for character independent facets |
| static const uint32_t char_facet = 1 << 0; ///< 8-bit character facets |
| static const uint32_t wchar_t_facet = 1 << 1; ///< wide character facets |
| static const uint32_t char16_t_facet = 1 << 2; ///< C++0x char16_t facets |
| static const uint32_t char32_t_facet = 1 << 3; ///< C++0x char32_t facets |
| |
| static const uint32_t character_first_facet = char_facet; ///< First facet specific for character type |
| static const uint32_t character_last_facet = char32_t_facet; ///< Last facet specific for character type |
| static const uint32_t all_characters = 0xFFFF; ///< Special mask -- generate all |
| |
| typedef uint32_t character_facet_type; ///<type that specifies the character type that locales can be generated for |
| |
| static const uint32_t convert_facet = 1 << 0; ///< Generate conversion facets |
| static const uint32_t collation_facet = 1 << 1; ///< Generate collation facets |
| static const uint32_t formatting_facet= 1 << 2; ///< Generate numbers, currency, date-time formatting facets |
| static const uint32_t parsing_facet = 1 << 3; ///< Generate numbers, currency, date-time formatting facets |
| static const uint32_t message_facet = 1 << 4; ///< Generate message facets |
| static const uint32_t codepage_facet = 1 << 5; ///< Generate character set conversion facets (derived from std::codecvt) |
| static const uint32_t boundary_facet = 1 << 6; ///< Generate boundary analysis facet |
| |
| static const uint32_t per_character_facet_first = convert_facet; ///< First facet specific for character |
| static const uint32_t per_character_facet_last = boundary_facet; ///< Last facet specific for character |
| |
| static const uint32_t calendar_facet = 1 << 16; ///< Generate boundary analysis facet |
| static const uint32_t information_facet = 1 << 17; ///< Generate general locale information facet |
| |
| static const uint32_t non_character_facet_first = calendar_facet; ///< First character independent facet |
| static const uint32_t non_character_facet_last = information_facet;///< Last character independent facet |
| |
| |
| static const uint32_t all_categories = 0xFFFFFFFFu; ///< Generate all of them |
| |
| typedef uint32_t locale_category_type; ///< a type used for more fine grained generation of facets |
| |
| /// |
| /// \brief the major class used for locale generation |
| /// |
| /// This class is used for specification of all parameters required for locale generation and |
| /// caching. This class const member functions are thread safe if locale class implementation is thread safe. |
| /// |
| |
| class BOOST_LOCALE_DECL generator { |
| public: |
| |
| /// |
| /// Create new generator using global localization_backend_manager |
| /// |
| generator(); |
| /// |
| /// Create new generator using specific localization_backend_manager |
| /// |
| generator(localization_backend_manager const &); |
| |
| ~generator(); |
| |
| /// |
| /// Set types of facets that should be generated, default all |
| /// |
| void categories(locale_category_type cats); |
| /// |
| /// Get types of facets that should be generated, default all |
| /// |
| locale_category_type categories() const; |
| |
| /// |
| /// Set the characters type for which the facets should be generated, default all supported |
| /// |
| void characters(character_facet_type chars); |
| /// |
| /// Get the characters type for which the facets should be generated, default all supported |
| /// |
| character_facet_type characters() const; |
| |
| /// |
| /// Add a new domain of messages that would be generated. It should be set in order to enable |
| /// messages support. |
| /// |
| /// Messages domain has following format: "name" or "name/encoding" |
| /// where name is the base name of the "mo" file where the catalog is stored |
| /// without ".mo" extension. For example for file \c /usr/share/locale/he/LC_MESSAGES/blog.mo |
| /// it would be \c blog. |
| /// |
| /// You can optionally specify the encoding of the keys in the sources by adding "/encoding_name" |
| /// For example blog/cp1255. |
| /// |
| /// If not defined all keys are assumed to be UTF-8 encoded. |
| /// |
| /// \note When you select a domain for the program using dgettext or message API, you |
| /// do not specify the encoding part. So for example if the provided |
| /// domain name was "blog/windows-1255" then for translation |
| /// you should use dgettext("blog","Hello") |
| /// |
| /// |
| void add_messages_domain(std::string const &domain); |
| /// |
| /// Set default message domain. If this member was not called, the first added messages domain is used. |
| /// If the domain \a domain is not added yet it is added. |
| /// |
| void set_default_messages_domain(std::string const &domain); |
| |
| /// |
| /// Remove all added domains from the list |
| /// |
| void clear_domains(); |
| |
| /// |
| /// Add a search path where dictionaries are looked in. |
| /// |
| /// \note |
| /// |
| /// - Under the Windows platform the path is treated as a path in the locale's encoding so |
| /// if you create locale "en_US.windows-1251" then path would be treated as cp1255, |
| /// and if it is en_US.UTF-8 it is treated as UTF-8. File name is always opened with |
| /// a wide file name as wide file names are the native file name on Windows. |
| /// |
| /// - Under POSIX platforms all paths passed as-is regardless of encoding as narrow |
| /// encodings are the native encodings for POSIX platforms. |
| /// |
| /// |
| void add_messages_path(std::string const &path); |
| |
| /// |
| /// Remove all added paths |
| /// |
| void clear_paths(); |
| |
| /// |
| /// Remove all cached locales |
| /// |
| void clear_cache(); |
| |
| /// |
| /// Turn locale caching ON |
| /// |
| void locale_cache_enabled(bool on); |
| |
| /// |
| /// Get locale cache option |
| /// |
| bool locale_cache_enabled() const; |
| |
| /// |
| /// Check if by default ANSI encoding is selected or UTF-8 onces. The default is false. |
| /// |
| bool use_ansi_encoding() const; |
| |
| /// |
| /// Select ANSI encodings as default system encoding rather then UTF-8 by default |
| /// under Windows. |
| /// |
| /// The default is the most portable and most powerful encoding, UTF-8, but the user |
| /// can select "system" one if dealing with legacy applications |
| /// |
| void use_ansi_encoding(bool enc); |
| |
| /// |
| /// Generate a locale with id \a id |
| /// |
| std::locale generate(std::string const &id) const; |
| /// |
| /// Generate a locale with id \a id. Use \a base as a locale to which all facets are added, |
| /// instead of std::locale::classic(). |
| /// |
| std::locale generate(std::locale const &base,std::string const &id) const; |
| /// |
| /// Shortcut to generate(id) |
| /// |
| std::locale operator()(std::string const &id) const |
| { |
| return generate(id); |
| } |
| |
| /// |
| /// Set backend specific option |
| /// |
| void set_option(std::string const &name,std::string const &value); |
| |
| /// |
| /// Clear backend specific options |
| /// |
| void clear_options(); |
| |
| private: |
| |
| void set_all_options(shared_ptr<localization_backend> backend,std::string const &id) const; |
| |
| generator(generator const &); |
| void operator=(generator const &); |
| |
| struct data; |
| std::auto_ptr<data> d; |
| }; |
| |
| } |
| } |
| #ifdef BOOST_MSVC |
| #pragma warning(pop) |
| #endif |
| |
| |
| #endif |
| // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 |
| |