annotate DEPENDENCIES/generic/include/boost/spirit/home/x3/char/char_class.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 /*=============================================================================
Chris@102 2 Copyright (c) 2001-2014 Joel de Guzman
Chris@102 3
Chris@102 4 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@102 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@102 6 ==============================================================================*/
Chris@102 7 #if !defined(BOOST_SPIRIT_X3_CHAR_CLASS_APRIL_16_2006_1051AM)
Chris@102 8 #define BOOST_SPIRIT_X3_CHAR_CLASS_APRIL_16_2006_1051AM
Chris@102 9
Chris@102 10 #if defined(_MSC_VER)
Chris@102 11 #pragma once
Chris@102 12 #endif
Chris@102 13
Chris@102 14 #include <boost/spirit/home/x3/char/char_parser.hpp>
Chris@102 15 #include <boost/spirit/home/x3/char/detail/cast_char.hpp>
Chris@102 16 #include <boost/spirit/home/support/char_encoding/standard.hpp>
Chris@102 17 #include <boost/spirit/home/support/char_encoding/standard_wide.hpp>
Chris@102 18 #include <boost/spirit/home/support/char_encoding/ascii.hpp>
Chris@102 19 #include <boost/spirit/home/support/char_encoding/iso8859_1.hpp>
Chris@102 20
Chris@102 21 namespace boost { namespace spirit { namespace x3
Chris@102 22 {
Chris@102 23 ///////////////////////////////////////////////////////////////////////////
Chris@102 24 struct char_tag {};
Chris@102 25 struct alnum_tag {};
Chris@102 26 struct alpha_tag {};
Chris@102 27 struct blank_tag {};
Chris@102 28 struct cntrl_tag {};
Chris@102 29 struct digit_tag {};
Chris@102 30 struct graph_tag {};
Chris@102 31 struct print_tag {};
Chris@102 32 struct punct_tag {};
Chris@102 33 struct space_tag {};
Chris@102 34 struct xdigit_tag {};
Chris@102 35 struct lower_tag {};
Chris@102 36 struct upper_tag {};
Chris@102 37
Chris@102 38 ///////////////////////////////////////////////////////////////////////////
Chris@102 39 template <typename Encoding>
Chris@102 40 struct char_class_base
Chris@102 41 {
Chris@102 42 typedef typename Encoding::char_type char_type;
Chris@102 43
Chris@102 44 #define BOOST_SPIRIT_X3_CLASSIFY(name) \
Chris@102 45 template <typename Char> \
Chris@102 46 static bool \
Chris@102 47 is(name##_tag, Char ch) \
Chris@102 48 { \
Chris@102 49 return Encoding::is##name \
Chris@102 50 BOOST_PREVENT_MACRO_SUBSTITUTION \
Chris@102 51 (detail::cast_char<char_type>(ch)); \
Chris@102 52 } \
Chris@102 53 /***/
Chris@102 54
Chris@102 55 BOOST_SPIRIT_X3_CLASSIFY(char)
Chris@102 56 BOOST_SPIRIT_X3_CLASSIFY(alnum)
Chris@102 57 BOOST_SPIRIT_X3_CLASSIFY(alpha)
Chris@102 58 BOOST_SPIRIT_X3_CLASSIFY(digit)
Chris@102 59 BOOST_SPIRIT_X3_CLASSIFY(xdigit)
Chris@102 60 BOOST_SPIRIT_X3_CLASSIFY(cntrl)
Chris@102 61 BOOST_SPIRIT_X3_CLASSIFY(graph)
Chris@102 62 BOOST_SPIRIT_X3_CLASSIFY(lower)
Chris@102 63 BOOST_SPIRIT_X3_CLASSIFY(print)
Chris@102 64 BOOST_SPIRIT_X3_CLASSIFY(punct)
Chris@102 65 BOOST_SPIRIT_X3_CLASSIFY(space)
Chris@102 66 BOOST_SPIRIT_X3_CLASSIFY(blank)
Chris@102 67 BOOST_SPIRIT_X3_CLASSIFY(upper)
Chris@102 68
Chris@102 69 #undef BOOST_SPIRIT_X3_CLASSIFY
Chris@102 70 };
Chris@102 71
Chris@102 72 template <typename Encoding, typename Tag>
Chris@102 73 struct char_class
Chris@102 74 : char_parser<char_class<Encoding, Tag>>
Chris@102 75 {
Chris@102 76 typedef Encoding encoding;
Chris@102 77 typedef Tag tag;
Chris@102 78 typedef typename Encoding::char_type char_type;
Chris@102 79 typedef char_type attribute_type;
Chris@102 80 static bool const has_attribute = true;
Chris@102 81
Chris@102 82 template <typename Char, typename Context>
Chris@102 83 bool test(Char ch, Context const&) const
Chris@102 84 {
Chris@102 85 return ((sizeof(Char) <= sizeof(char_type)) || encoding::ischar(ch))
Chris@102 86 && char_class_base<Encoding>::is(tag(), ch);
Chris@102 87 }
Chris@102 88 };
Chris@102 89
Chris@102 90 #define BOOST_SPIRIT_X3_CHAR_CLASS(encoding, name) \
Chris@102 91 typedef char_class<char_encoding::encoding, name##_tag> name##_type; \
Chris@102 92 name##_type const name = name##_type(); \
Chris@102 93 /***/
Chris@102 94
Chris@102 95 #define BOOST_SPIRIT_X3_CHAR_CLASSES(encoding) \
Chris@102 96 namespace encoding \
Chris@102 97 { \
Chris@102 98 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, alnum) \
Chris@102 99 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, alpha) \
Chris@102 100 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, digit) \
Chris@102 101 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, xdigit) \
Chris@102 102 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, cntrl) \
Chris@102 103 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, graph) \
Chris@102 104 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, lower) \
Chris@102 105 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, print) \
Chris@102 106 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, punct) \
Chris@102 107 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, space) \
Chris@102 108 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, blank) \
Chris@102 109 BOOST_SPIRIT_X3_CHAR_CLASS(encoding, upper) \
Chris@102 110 } \
Chris@102 111 /***/
Chris@102 112
Chris@102 113 BOOST_SPIRIT_X3_CHAR_CLASSES(standard)
Chris@102 114 BOOST_SPIRIT_X3_CHAR_CLASSES(standard_wide)
Chris@102 115 BOOST_SPIRIT_X3_CHAR_CLASSES(ascii)
Chris@102 116 BOOST_SPIRIT_X3_CHAR_CLASSES(iso8859_1)
Chris@102 117
Chris@102 118 #undef BOOST_SPIRIT_X3_CHAR_CLASS
Chris@102 119 #undef BOOST_SPIRIT_X3_CHAR_CLASSES
Chris@102 120
Chris@102 121 using standard::alnum_type;
Chris@102 122 using standard::alpha_type;
Chris@102 123 using standard::digit_type;
Chris@102 124 using standard::xdigit_type;
Chris@102 125 using standard::cntrl_type;
Chris@102 126 using standard::graph_type;
Chris@102 127 using standard::lower_type;
Chris@102 128 using standard::print_type;
Chris@102 129 using standard::punct_type;
Chris@102 130 using standard::space_type;
Chris@102 131 using standard::blank_type;
Chris@102 132 using standard::upper_type;
Chris@102 133
Chris@102 134 using standard::alnum;
Chris@102 135 using standard::alpha;
Chris@102 136 using standard::digit;
Chris@102 137 using standard::xdigit;
Chris@102 138 using standard::cntrl;
Chris@102 139 using standard::graph;
Chris@102 140 using standard::lower;
Chris@102 141 using standard::print;
Chris@102 142 using standard::punct;
Chris@102 143 using standard::space;
Chris@102 144 using standard::blank;
Chris@102 145 using standard::upper;
Chris@102 146 }}}
Chris@102 147
Chris@102 148 #endif