Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // detail_fwd.hpp Chris@16: // Chris@16: // Copyright 2008 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005 Chris@16: #define BOOST_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005 Chris@16: Chris@16: // MS compatible compilers support #pragma once Chris@101: #if defined(_MSC_VER) Chris@16: # pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include // for INT_MAX Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace xpressive { namespace detail Chris@16: { Chris@16: typedef unsigned int uint_t; Chris@16: Chris@16: template Chris@16: struct generic_quant_tag; Chris@16: Chris@16: struct modifier_tag; Chris@16: Chris@16: struct check_tag; Chris@16: Chris@16: typedef mpl::size_t unknown_width; Chris@16: Chris@16: struct type_info_less; Chris@16: Chris@16: typedef std::map action_args_type; Chris@16: Chris@16: struct action_context; Chris@16: Chris@16: struct ReplaceAlgo; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // placeholders Chris@16: // Chris@16: struct mark_placeholder; Chris@16: Chris@16: struct posix_charset_placeholder; Chris@16: Chris@16: template Chris@16: struct assert_word_placeholder; Chris@16: Chris@16: template Chris@16: struct range_placeholder; Chris@16: Chris@16: struct assert_bol_placeholder; Chris@16: Chris@16: struct assert_eol_placeholder; Chris@16: Chris@16: struct logical_newline_placeholder; Chris@16: Chris@16: struct self_placeholder; Chris@16: Chris@16: template Chris@16: struct attribute_placeholder; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // matchers Chris@16: // Chris@16: struct end_matcher; Chris@16: Chris@16: struct independent_end_matcher; Chris@16: Chris@16: struct assert_bos_matcher; Chris@16: Chris@16: struct assert_eos_matcher; Chris@16: Chris@16: template Chris@16: struct assert_bol_matcher; Chris@16: Chris@16: template Chris@16: struct assert_eol_matcher; Chris@16: Chris@16: template Chris@16: struct assert_word_matcher; Chris@16: Chris@16: struct true_matcher; Chris@16: Chris@16: template Chris@16: struct alternate_matcher; Chris@16: Chris@16: struct alternate_end_matcher; Chris@16: Chris@16: template Chris@16: struct posix_charset_matcher; Chris@16: Chris@16: template Chris@16: struct sequence; Chris@16: Chris@16: template Chris@16: struct mark_matcher; Chris@16: Chris@16: struct mark_begin_matcher; Chris@16: Chris@16: struct mark_end_matcher; Chris@16: Chris@16: template Chris@16: struct regex_matcher; Chris@16: Chris@16: template Chris@16: struct regex_byref_matcher; Chris@16: Chris@16: template Chris@16: struct compound_charset; Chris@16: Chris@16: template > Chris@16: struct charset_matcher; Chris@16: Chris@16: template Chris@16: struct range_matcher; Chris@16: Chris@16: template Chris@16: struct set_matcher; Chris@16: Chris@16: template Chris@16: struct simple_repeat_matcher; Chris@16: Chris@16: struct repeat_begin_matcher; Chris@16: Chris@16: template Chris@16: struct repeat_end_matcher; Chris@16: Chris@16: template Chris@16: struct literal_matcher; Chris@16: Chris@16: template Chris@16: struct string_matcher; Chris@16: Chris@16: template Chris@16: struct action_matcher; Chris@16: Chris@16: template Chris@16: struct predicate_matcher; Chris@16: Chris@16: template Chris@16: struct optional_matcher; Chris@16: Chris@16: template Chris@16: struct optional_mark_matcher; Chris@16: Chris@16: template Chris@16: struct attr_matcher; Chris@16: Chris@16: template Chris@16: struct attr_begin_matcher; Chris@16: Chris@16: struct attr_end_matcher; Chris@16: Chris@16: template Chris@16: struct is_modifiable; Chris@16: Chris@16: template Chris@16: struct alternates_list; Chris@16: Chris@16: template Chris@16: struct modifier_op; Chris@16: Chris@16: struct icase_modifier; Chris@16: Chris@16: template Chris@16: struct xpression_visitor; Chris@16: Chris@16: template Chris@16: struct regex_impl; Chris@16: Chris@16: struct epsilon_matcher; Chris@16: Chris@16: template Chris@16: struct nested_results; Chris@16: Chris@16: template Chris@16: struct regex_id_filter_predicate; Chris@16: Chris@16: template Chris@16: struct keeper_matcher; Chris@16: Chris@16: template Chris@16: struct lookahead_matcher; Chris@16: Chris@16: template Chris@16: struct lookbehind_matcher; Chris@16: Chris@16: template Chris@16: struct word_boundary; Chris@16: Chris@16: template Chris@16: sequence make_dynamic(Matcher const &matcher); Chris@16: Chris@16: template Chris@16: struct xpression_linker; Chris@16: Chris@16: template Chris@16: struct xpression_peeker; Chris@16: Chris@16: struct any_matcher; Chris@16: Chris@16: template Chris@16: struct logical_newline_matcher; Chris@16: Chris@16: typedef proto::expr, 0> logical_newline_xpression; Chris@16: Chris@16: struct set_initializer; Chris@16: Chris@16: typedef proto::expr, 0> set_initializer_type; Chris@16: Chris@16: struct lookahead_tag; Chris@16: Chris@16: struct lookbehind_tag; Chris@16: Chris@16: struct keeper_tag; Chris@16: Chris@16: template Chris@16: struct locale_modifier; Chris@16: Chris@16: template Chris@16: struct matcher_wrapper; Chris@16: Chris@16: template Chris@16: struct regex_traits_type; Chris@16: Chris@16: template Chris@16: struct let_; Chris@16: Chris@16: template Chris@16: void bind_args(let_ const &, match_results &); Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Misc. Chris@16: struct no_next; Chris@16: Chris@16: template Chris@16: struct core_access; Chris@16: Chris@16: template Chris@16: struct match_state; Chris@16: Chris@16: template Chris@16: struct matchable; Chris@16: Chris@16: template Chris@16: struct matchable_ex; Chris@16: Chris@16: template Chris@16: struct dynamic_xpression; Chris@16: Chris@16: template Chris@16: struct shared_matchable; Chris@16: Chris@16: template Chris@16: struct alternates_vector; Chris@16: Chris@16: template Chris@16: struct static_xpression; Chris@16: Chris@16: typedef static_xpression end_xpression; Chris@16: Chris@16: typedef static_xpression alternate_end_xpression; Chris@16: Chris@16: typedef static_xpression independent_end_xpression; Chris@16: Chris@16: typedef static_xpression true_xpression; Chris@16: Chris@16: template Chris@16: struct static_xpression; Chris@16: Chris@16: template Chris@16: struct stacked_xpression; Chris@16: Chris@16: template Chris@16: struct is_static_xpression; Chris@16: Chris@16: template Chris@16: struct sub_match_impl; Chris@16: Chris@16: template Chris@16: struct list; Chris@16: Chris@16: template Chris@16: struct results_cache; Chris@16: Chris@16: template Chris@16: struct sequence_stack; Chris@16: Chris@16: template Chris@16: struct results_extras; Chris@16: Chris@16: template Chris@16: struct match_context; Chris@16: Chris@16: template Chris@16: struct sub_match_vector; Chris@16: Chris@16: template Chris@16: struct action_arg; Chris@16: Chris@16: struct actionable; Chris@16: Chris@16: template Chris@16: struct traits; Chris@16: Chris@16: template Chris@16: Traits const &traits_cast(match_state const &state); Chris@16: Chris@16: template Chris@16: struct basic_chset; Chris@16: Chris@16: template Chris@16: struct named_mark; Chris@16: Chris@16: template Chris@16: struct memento; Chris@16: Chris@16: template Chris@16: void set_char(compound_charset &chset, Char ch, Traits const &tr, bool icase); Chris@16: Chris@16: template Chris@16: void set_range(compound_charset &chset, Char from, Char to, Traits const &tr, bool icase); Chris@16: Chris@16: template Chris@16: void set_class(compound_charset &chset, typename Traits::char_class_type char_class, bool no, Traits const &tr); Chris@16: Chris@16: template Chris@16: void set_char(basic_chset &chset, Char ch, Traits const &tr, bool icase); Chris@16: Chris@16: template Chris@16: void set_range(basic_chset &chset, Char from, Char to, Traits const &tr, bool icase); Chris@16: Chris@16: template Chris@16: void set_class(basic_chset &chset, typename Traits::char_class_type char_class, bool no, Traits const &tr); Chris@16: Chris@16: template Chris@16: static_xpression const Chris@16: make_static(Matcher const &matcher); Chris@16: Chris@16: template Chris@16: static_xpression const Chris@16: make_static(Matcher const &matcher, Next const &next); Chris@16: Chris@16: int get_mark_number(basic_mark_tag const &); Chris@16: Chris@16: template Chris@16: void static_compile(Xpr const &xpr, shared_ptr > const &impl); Chris@16: Chris@16: struct quant_spec; Chris@16: Chris@16: template Chris@16: void make_simple_repeat(quant_spec const &spec, sequence &seq, Xpr const &xpr); Chris@16: Chris@16: template Chris@16: void make_simple_repeat(quant_spec const &spec, sequence &seq); Chris@16: Chris@16: template Chris@16: void make_repeat(quant_spec const &spec, sequence &seq, int mark_nbr); Chris@16: Chris@16: template Chris@16: void make_repeat(quant_spec const &spec, sequence &seq); Chris@16: Chris@16: template Chris@16: void make_optional(quant_spec const &spec, sequence &seq); Chris@16: Chris@16: template Chris@16: void make_optional(quant_spec const &spec, sequence &seq, int mark_nbr); Chris@16: Chris@16: template Chris@16: struct string_type Chris@16: { Chris@16: typedef std::vector type; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct string_type Chris@16: { Chris@16: typedef std::string type; Chris@16: }; Chris@16: Chris@16: #ifndef BOOST_XPRESSIVE_NO_WREGEX Chris@16: template<> Chris@16: struct string_type Chris@16: { Chris@16: typedef std::wstring type; Chris@16: }; Chris@16: #endif Chris@16: Chris@16: }}} // namespace boost::xpressive::detail Chris@16: Chris@16: namespace boost { namespace xpressive { namespace grammar_detail Chris@16: { Chris@16: using proto::_; Chris@16: using proto::or_; Chris@16: using proto::if_; Chris@16: using proto::call; Chris@16: using proto::when; Chris@16: using proto::otherwise; Chris@16: using proto::switch_; Chris@16: using proto::make; Chris@16: using proto::_child; Chris@16: using proto::_value; Chris@16: using proto::_left; Chris@16: using proto::_right; Chris@16: using proto::not_; Chris@16: using proto::_state; Chris@16: using proto::_data; Chris@16: using proto::callable; Chris@16: using proto::transform; Chris@16: using proto::fold; Chris@16: using proto::reverse_fold; Chris@16: using proto::fold_tree; Chris@16: using proto::reverse_fold_tree; Chris@16: using proto::terminal; Chris@16: using proto::shift_right; Chris@16: using proto::bitwise_or; Chris@16: using proto::logical_not; Chris@16: using proto::dereference; Chris@16: using proto::unary_plus; Chris@16: using proto::negate; Chris@16: using proto::complement; Chris@16: using proto::comma; Chris@16: using proto::assign; Chris@16: using proto::subscript; Chris@16: using proto::nary_expr; Chris@16: using proto::unary_expr; Chris@16: using proto::binary_expr; Chris@16: using proto::_deep_copy; Chris@16: using proto::vararg; Chris@16: namespace tag = proto::tag; Chris@16: }}} Chris@16: Chris@16: namespace boost { namespace xpressive { namespace op Chris@16: { Chris@16: struct push; Chris@16: struct push_back; Chris@16: struct pop; Chris@16: struct push_front; Chris@16: struct pop_back; Chris@16: struct pop_front; Chris@16: struct back; Chris@16: struct front; Chris@16: struct top; Chris@16: struct first; Chris@16: struct second; Chris@16: struct matched; Chris@16: struct length; Chris@16: struct str; Chris@16: struct insert; Chris@16: struct make_pair; Chris@16: Chris@16: template Chris@16: struct as; Chris@16: template Chris@16: struct static_cast_; Chris@16: template Chris@16: struct dynamic_cast_; Chris@16: template Chris@16: struct const_cast_; Chris@16: template Chris@16: struct construct; Chris@16: template Chris@16: struct throw_; Chris@16: }}} // namespace boost::xpressive::op Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: namespace boost { namespace xpressive Chris@16: { Chris@16: Chris@16: /// INTERNAL ONLY Chris@16: template Chris@16: typename Traits::char_class_type Chris@16: lookup_classname(Traits const &traits, char const (&cname)[N], bool icase = false); Chris@16: Chris@16: }} // namespace boost::xpressive Chris@16: Chris@16: #endif