Chris@16
|
1 // Copyright (c) 2001-2011 Hartmut Kaiser
|
Chris@16
|
2 //
|
Chris@16
|
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 #if !defined(SPIRIT_STRICT_RELAXED_APR_22_2010_0959AM)
|
Chris@16
|
7 #define SPIRIT_STRICT_RELAXED_APR_22_2010_0959AM
|
Chris@16
|
8
|
Chris@16
|
9 #if defined(_MSC_VER)
|
Chris@16
|
10 #pragma once
|
Chris@16
|
11 #endif
|
Chris@16
|
12
|
Chris@16
|
13 #include <boost/spirit/home/support/common_terminals.hpp>
|
Chris@16
|
14 #include <boost/spirit/home/support/modify.hpp>
|
Chris@16
|
15 #include <boost/spirit/home/karma/domain.hpp>
|
Chris@16
|
16 #include <boost/spirit/home/karma/meta_compiler.hpp>
|
Chris@16
|
17
|
Chris@16
|
18 namespace boost { namespace spirit
|
Chris@16
|
19 {
|
Chris@16
|
20 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
21 // Enablers
|
Chris@16
|
22 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
23 template <>
|
Chris@16
|
24 struct use_directive<karma::domain, tag::strict> // enables strict[]
|
Chris@16
|
25 : mpl::true_ {};
|
Chris@16
|
26
|
Chris@16
|
27 template <>
|
Chris@16
|
28 struct use_directive<karma::domain, tag::relaxed> // enables relaxed[]
|
Chris@16
|
29 : mpl::true_ {};
|
Chris@16
|
30
|
Chris@16
|
31 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
32 template <>
|
Chris@16
|
33 struct is_modifier_directive<karma::domain, tag::strict>
|
Chris@16
|
34 : mpl::true_ {};
|
Chris@16
|
35
|
Chris@16
|
36 template <>
|
Chris@16
|
37 struct is_modifier_directive<karma::domain, tag::relaxed>
|
Chris@16
|
38 : mpl::true_ {};
|
Chris@16
|
39
|
Chris@16
|
40 ///////////////////////////////////////////////////////////////////////////
|
Chris@16
|
41 // Don't add tag::strict or tag::relaxed if there is already one of those
|
Chris@16
|
42 // in the modifier list
|
Chris@16
|
43 template <typename Current>
|
Chris@16
|
44 struct compound_modifier<Current, tag::strict
|
Chris@16
|
45 , typename enable_if<has_modifier<Current, tag::relaxed> >::type>
|
Chris@16
|
46 : Current
|
Chris@16
|
47 {
|
Chris@16
|
48 compound_modifier()
|
Chris@16
|
49 : Current() {}
|
Chris@16
|
50
|
Chris@16
|
51 compound_modifier(Current const& current, tag::strict const&)
|
Chris@16
|
52 : Current(current) {}
|
Chris@16
|
53 };
|
Chris@16
|
54
|
Chris@16
|
55 template <typename Current>
|
Chris@16
|
56 struct compound_modifier<Current, tag::relaxed
|
Chris@16
|
57 , typename enable_if<has_modifier<Current, tag::strict> >::type>
|
Chris@16
|
58 : Current
|
Chris@16
|
59 {
|
Chris@16
|
60 compound_modifier()
|
Chris@16
|
61 : Current() {}
|
Chris@16
|
62
|
Chris@16
|
63 compound_modifier(Current const& current, tag::relaxed const&)
|
Chris@16
|
64 : Current(current) {}
|
Chris@16
|
65 };
|
Chris@16
|
66
|
Chris@16
|
67 namespace karma
|
Chris@16
|
68 {
|
Chris@16
|
69 #ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
|
Chris@16
|
70 using boost::spirit::strict;
|
Chris@16
|
71 using boost::spirit::relaxed;
|
Chris@16
|
72 #endif
|
Chris@16
|
73 using boost::spirit::strict_type;
|
Chris@16
|
74 using boost::spirit::relaxed_type;
|
Chris@16
|
75 }
|
Chris@16
|
76 }}
|
Chris@16
|
77
|
Chris@16
|
78 #endif
|