// Copyright (c) 2001-2011 Hartmut Kaiser | |
// Copyright (c) 2001-2011 Joel de Guzman | |
// | |
// 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) | |
#if !defined(SPIRIT_UPPER_LOWER_CASE_JANUARY_19_2009_1142AM) | |
#define SPIRIT_UPPER_LOWER_CASE_JANUARY_19_2009_1142AM | |
#if defined(_MSC_VER) | |
#pragma once | |
#endif | |
#include <boost/spirit/home/support/common_terminals.hpp> | |
#include <boost/spirit/home/support/modify.hpp> | |
#include <boost/spirit/home/karma/domain.hpp> | |
#include <boost/spirit/home/karma/meta_compiler.hpp> | |
namespace boost { namespace spirit | |
{ | |
/////////////////////////////////////////////////////////////////////////// | |
// Enablers | |
/////////////////////////////////////////////////////////////////////////// | |
template <typename CharEncoding> | |
struct use_directive< | |
karma::domain, tag::char_code<tag::upper, CharEncoding> > // enables upper | |
: mpl::true_ {}; | |
template <typename CharEncoding> | |
struct use_directive< | |
karma::domain, tag::char_code<tag::lower, CharEncoding> > // enables lower | |
: mpl::true_ {}; | |
/////////////////////////////////////////////////////////////////////////// | |
template <typename CharEncoding> | |
struct is_modifier_directive<karma::domain | |
, tag::char_code<tag::upper, CharEncoding> > | |
: mpl::true_ {}; | |
template <typename CharEncoding> | |
struct is_modifier_directive<karma::domain | |
, tag::char_code<tag::lower, CharEncoding> > | |
: mpl::true_ {}; | |
/////////////////////////////////////////////////////////////////////////// | |
// Don't add tag::upper or tag::lower if there is already one of those in | |
// the modifier list | |
template <typename Current, typename CharEncoding> | |
struct compound_modifier< | |
Current | |
, tag::char_code<tag::upper, CharEncoding> | |
, typename enable_if< | |
has_modifier<Current, tag::char_code<tag::lower, CharEncoding> > | |
>::type | |
> | |
: Current | |
{ | |
compound_modifier() | |
: Current() {} | |
compound_modifier(Current const& current, | |
tag::char_code<tag::upper, CharEncoding> const&) | |
: Current(current) {} | |
}; | |
template <typename Current, typename CharEncoding> | |
struct compound_modifier< | |
Current | |
, tag::char_code<tag::lower, CharEncoding> | |
, typename enable_if< | |
has_modifier<Current, tag::char_code<tag::upper, CharEncoding> > | |
>::type | |
> | |
: Current | |
{ | |
compound_modifier() | |
: Current() {} | |
compound_modifier(Current const& current, | |
tag::char_code<tag::lower, CharEncoding> const&) | |
: Current(current) {} | |
}; | |
}} | |
#endif |