// // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #ifndef BOOST_LOCALE_BOUNDARY_FACETS_HPP_INCLUDED #define BOOST_LOCALE_BOUNDARY_FACETS_HPP_INCLUDED #include #include #include #include #include #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable : 4275 4251 4231 4660) #endif namespace boost { namespace locale { /// \brief This namespace contains all operations required for boundary analysis of text namespace boundary { /// \addtogroup boundary /// /// @{ /// \brief This structure is used for representing boundary points /// that follow the offset. struct break_info { /// Create empty break point at beginning break_info() : offset(0), rule(0) {} /// Create an empty break point at offset v. /// it is useful for order comparison with other points. break_info(size_t v) : offset(v), rule(0) {} /// Offset from the beginning of the text where a break occurs. size_t offset; /// The identification of this break point according to /// various break types rule_type rule; /// Compare two break points' offset. Allows to search with /// standard algorithms over the index. bool operator<(const break_info& other) const { return offset < other.offset; } }; /// This type holds the analysis of the text - all its break points /// with marks typedef std::vector index_type; /// \brief This facet generates an index for boundary analysis of a given text. /// /// It is implemented for supported character types, at least \c char, \c wchar_t template class BOOST_SYMBOL_VISIBLE boundary_indexing : public std::locale::facet, public boost::locale::detail::facet_id> { BOOST_LOCALE_ASSERT_IS_SUPPORTED(Char); public: /// Default constructor typical for facets boundary_indexing(size_t refs = 0) : std::locale::facet(refs) {} /// Create index for boundary type \a t for text in range [begin,end) /// /// The returned value is an index of type \ref index_type. Note that this /// index is never empty, even if the range [begin,end) is empty it consists /// of at least one boundary point with the offset 0. virtual index_type map(boundary_type t, const Char* begin, const Char* end) const = 0; }; /// @} } // namespace boundary }} // namespace boost::locale #ifdef BOOST_MSVC # pragma warning(pop) #endif #endif