annotate DEPENDENCIES/generic/include/boost/spirit/home/support/char_encoding/standard_wide.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2001-2011 Hartmut Kaiser
Chris@16 3 Copyright (c) 2001-2011 Joel de Guzman
Chris@16 4
Chris@16 5 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 =============================================================================*/
Chris@16 8 #if !defined(BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM)
Chris@16 9 #define BOOST_SPIRIT_STANDARD_WIDE_NOVEMBER_10_2006_0913AM
Chris@16 10
Chris@16 11 #if defined(_MSC_VER)
Chris@16 12 #pragma once
Chris@16 13 #endif
Chris@16 14
Chris@16 15 #include <cwctype>
Chris@16 16 #include <string>
Chris@16 17
Chris@16 18 #include <boost/cstdint.hpp>
Chris@16 19 #include <boost/spirit/home/support/assert_msg.hpp>
Chris@16 20
Chris@16 21 namespace boost { namespace spirit { namespace traits
Chris@16 22 {
Chris@16 23 template <std::size_t N>
Chris@16 24 struct wchar_t_size
Chris@16 25 {
Chris@16 26 BOOST_SPIRIT_ASSERT_MSG(N == 1 || N == 2 || N == 4,
Chris@16 27 not_supported_size_of_wchar_t, ());
Chris@16 28 };
Chris@16 29
Chris@16 30 template <> struct wchar_t_size<1> { enum { mask = 0xff }; };
Chris@16 31 template <> struct wchar_t_size<2> { enum { mask = 0xffff }; };
Chris@16 32 template <> struct wchar_t_size<4> { enum { mask = 0xffffffff }; };
Chris@16 33
Chris@16 34 }}}
Chris@16 35
Chris@16 36 namespace boost { namespace spirit { namespace char_encoding
Chris@16 37 {
Chris@16 38 ///////////////////////////////////////////////////////////////////////////
Chris@16 39 // Test characters for specified conditions (using std wchar_t functions)
Chris@16 40 ///////////////////////////////////////////////////////////////////////////
Chris@16 41
Chris@16 42 struct standard_wide
Chris@16 43 {
Chris@16 44 typedef wchar_t char_type;
Chris@16 45
Chris@16 46 template <typename Char>
Chris@16 47 static typename std::char_traits<Char>::int_type
Chris@16 48 to_int_type(Char ch)
Chris@16 49 {
Chris@16 50 return std::char_traits<Char>::to_int_type(ch);
Chris@16 51 }
Chris@16 52
Chris@16 53 template <typename Char>
Chris@16 54 static Char
Chris@16 55 to_char_type(typename std::char_traits<Char>::int_type ch)
Chris@16 56 {
Chris@16 57 return std::char_traits<Char>::to_char_type(ch);
Chris@16 58 }
Chris@16 59
Chris@16 60 static bool
Chris@16 61 ischar(int ch)
Chris@16 62 {
Chris@16 63 // we have to watch out for sign extensions (casting is there to
Chris@16 64 // silence certain compilers complaining about signed/unsigned
Chris@16 65 // mismatch)
Chris@16 66 return (
Chris@16 67 std::size_t(0) ==
Chris@16 68 std::size_t(ch & ~traits::wchar_t_size<sizeof(wchar_t)>::mask) ||
Chris@16 69 std::size_t(~0) ==
Chris@16 70 std::size_t(ch | traits::wchar_t_size<sizeof(wchar_t)>::mask)
Chris@16 71 ) ? true : false; // any wchar_t, but no other bits set
Chris@16 72 }
Chris@16 73
Chris@16 74 static bool
Chris@16 75 isalnum(wchar_t ch)
Chris@16 76 {
Chris@16 77 using namespace std;
Chris@16 78 return iswalnum(to_int_type(ch)) ? true : false;
Chris@16 79 }
Chris@16 80
Chris@16 81 static bool
Chris@16 82 isalpha(wchar_t ch)
Chris@16 83 {
Chris@16 84 using namespace std;
Chris@16 85 return iswalpha(to_int_type(ch)) ? true : false;
Chris@16 86 }
Chris@16 87
Chris@16 88 static bool
Chris@16 89 iscntrl(wchar_t ch)
Chris@16 90 {
Chris@16 91 using namespace std;
Chris@16 92 return iswcntrl(to_int_type(ch)) ? true : false;
Chris@16 93 }
Chris@16 94
Chris@16 95 static bool
Chris@16 96 isdigit(wchar_t ch)
Chris@16 97 {
Chris@16 98 using namespace std;
Chris@16 99 return iswdigit(to_int_type(ch)) ? true : false;
Chris@16 100 }
Chris@16 101
Chris@16 102 static bool
Chris@16 103 isgraph(wchar_t ch)
Chris@16 104 {
Chris@16 105 using namespace std;
Chris@16 106 return iswgraph(to_int_type(ch)) ? true : false;
Chris@16 107 }
Chris@16 108
Chris@16 109 static bool
Chris@16 110 islower(wchar_t ch)
Chris@16 111 {
Chris@16 112 using namespace std;
Chris@16 113 return iswlower(to_int_type(ch)) ? true : false;
Chris@16 114 }
Chris@16 115
Chris@16 116 static bool
Chris@16 117 isprint(wchar_t ch)
Chris@16 118 {
Chris@16 119 using namespace std;
Chris@16 120 return iswprint(to_int_type(ch)) ? true : false;
Chris@16 121 }
Chris@16 122
Chris@16 123 static bool
Chris@16 124 ispunct(wchar_t ch)
Chris@16 125 {
Chris@16 126 using namespace std;
Chris@16 127 return iswpunct(to_int_type(ch)) ? true : false;
Chris@16 128 }
Chris@16 129
Chris@16 130 static bool
Chris@16 131 isspace(wchar_t ch)
Chris@16 132 {
Chris@16 133 using namespace std;
Chris@16 134 return iswspace(to_int_type(ch)) ? true : false;
Chris@16 135 }
Chris@16 136
Chris@16 137 static bool
Chris@16 138 isupper(wchar_t ch)
Chris@16 139 {
Chris@16 140 using namespace std;
Chris@16 141 return iswupper(to_int_type(ch)) ? true : false;
Chris@16 142 }
Chris@16 143
Chris@16 144 static bool
Chris@16 145 isxdigit(wchar_t ch)
Chris@16 146 {
Chris@16 147 using namespace std;
Chris@16 148 return iswxdigit(to_int_type(ch)) ? true : false;
Chris@16 149 }
Chris@16 150
Chris@16 151 static bool
Chris@16 152 isblank BOOST_PREVENT_MACRO_SUBSTITUTION (wchar_t ch)
Chris@16 153 {
Chris@16 154 return (ch == L' ' || ch == L'\t');
Chris@16 155 }
Chris@16 156
Chris@101 157 ///////////////////////////////////////////////////////////////////////
Chris@101 158 // Simple character conversions
Chris@101 159 ///////////////////////////////////////////////////////////////////////
Chris@101 160
Chris@16 161 static wchar_t
Chris@16 162 tolower(wchar_t ch)
Chris@16 163 {
Chris@16 164 using namespace std;
Chris@16 165 return isupper(ch) ?
Chris@16 166 to_char_type<wchar_t>(towlower(to_int_type(ch))) : ch;
Chris@16 167 }
Chris@16 168
Chris@16 169 static wchar_t
Chris@16 170 toupper(wchar_t ch)
Chris@16 171 {
Chris@16 172 using namespace std;
Chris@16 173 return islower(ch) ?
Chris@16 174 to_char_type<wchar_t>(towupper(to_int_type(ch))) : ch;
Chris@16 175 }
Chris@16 176
Chris@16 177 static ::boost::uint32_t
Chris@16 178 toucs4(int ch)
Chris@16 179 {
Chris@16 180 return ch;
Chris@16 181 }
Chris@16 182 };
Chris@16 183 }}}
Chris@16 184
Chris@16 185 #endif
Chris@16 186