diff DEPENDENCIES/generic/include/boost/locale/boundary/facets.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/locale/boundary/facets.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,203 @@
+//
+//  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_BOUNDARY_FACETS_HPP_INCLUDED
+#define BOOST_LOCALE_BOUNDARY_FACETS_HPP_INCLUDED
+
+#include <boost/locale/config.hpp>
+#include <boost/locale/boundary/types.hpp>
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4275 4251 4231 4660)
+#endif
+#include <locale>
+#include <vector>
+
+
+
+
+namespace boost {
+
+    namespace locale {
+        
+        ///
+        /// \brief This namespae contains all operations required for boundary analysis of text
+        ///
+        namespace boundary {
+            ///
+            /// \addtogroup boundary
+            ///
+            /// @{
+            ///
+
+            
+            ///
+            /// \brief This structure is used for representing boundary point
+            /// that follows the offset.
+            ///
+            struct break_info {
+
+                ///
+                /// Create empty break point at beginning
+                ///
+                break_info() : 
+                    offset(0),
+                    rule(0)
+                {
+                }
+                ///
+                /// Create 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 beggining 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<(break_info const &other) const
+                {
+                    return offset < other.offset;
+                }
+            };
+            
+            ///
+            /// This type holds the analysis of the text - all its break points
+            /// with marks
+            ///
+            typedef std::vector<break_info> index_type;
+
+
+            template<typename CharType>
+            class boundary_indexing;
+
+            #ifdef BOOST_LOCALE_DOXYGEN
+            ///
+            /// \brief This facet generates an index for boundary analysis
+            /// for a given text.
+            ///
+            /// It is specialized for 4 types of characters \c char_t, \c wchar_t, \c char16_t and \c char32_t
+            ///
+            template<typename Char>
+            class BOOST_LOCALE_DECL boundary_indexing : public std::locale::facet {
+            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,Char const *begin,Char const *end) const = 0;
+                ///
+                /// Identification of this facet
+                ///
+                static std::locale::id id;
+                
+                #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+                std::locale::id& __get_id (void) const { return id; }
+                #endif
+            };
+
+            #else
+
+            template<>
+            class BOOST_LOCALE_DECL boundary_indexing<char> : public std::locale::facet {
+            public:
+                boundary_indexing(size_t refs=0) : std::locale::facet(refs)
+                {
+                }
+                virtual index_type map(boundary_type t,char const *begin,char const *end) const = 0;
+                static std::locale::id id;
+                #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+                std::locale::id& __get_id (void) const { return id; }
+                #endif
+            };
+            
+            template<>
+            class BOOST_LOCALE_DECL boundary_indexing<wchar_t> : public std::locale::facet {
+            public:
+                boundary_indexing(size_t refs=0) : std::locale::facet(refs)
+                {
+                }
+                virtual index_type map(boundary_type t,wchar_t const *begin,wchar_t const *end) const = 0;
+
+                static std::locale::id id;
+                #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+                std::locale::id& __get_id (void) const { return id; }
+                #endif
+            };
+            
+            #ifdef BOOST_HAS_CHAR16_T
+            template<>
+            class BOOST_LOCALE_DECL boundary_indexing<char16_t> : public std::locale::facet {
+            public:
+                boundary_indexing(size_t refs=0) : std::locale::facet(refs)
+                {
+                }
+                virtual index_type map(boundary_type t,char16_t const *begin,char16_t const *end) const = 0;
+                static std::locale::id id;
+                #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+                std::locale::id& __get_id (void) const { return id; }
+                #endif
+            };
+            #endif
+            
+            #ifdef BOOST_HAS_CHAR32_T
+            template<>
+            class BOOST_LOCALE_DECL boundary_indexing<char32_t> : public std::locale::facet {
+            public:
+                boundary_indexing(size_t refs=0) : std::locale::facet(refs)
+                {
+                }
+                virtual index_type map(boundary_type t,char32_t const *begin,char32_t const *end) const = 0;
+                static std::locale::id id;
+                #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+                std::locale::id& __get_id (void) const { return id; }
+                #endif
+            };
+            #endif
+
+            #endif
+
+            ///
+            /// @}
+            ///
+
+
+        } // boundary
+
+    } // locale
+} // boost
+
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4