$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: eric_at_[hidden]
Date: 2007-11-29 12:38:25
Author: eric_niebler
Date: 2007-11-29 12:38:25 EST (Thu, 29 Nov 2007)
New Revision: 41466
URL: http://svn.boost.org/trac/boost/changeset/41466
Log:
support keep(), before(), after(), ~before() and  ~after()
Text files modified: 
   branches/proto/v3/boost/xpressive/detail/detail_fwd.hpp      |     7 +++-                                    
   branches/proto/v3/boost/xpressive/detail/static/grammar2.hpp |    56 +++++++++++++++++++++++++++++++++++-----
   2 files changed, 54 insertions(+), 9 deletions(-)
Modified: branches/proto/v3/boost/xpressive/detail/detail_fwd.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/detail/detail_fwd.hpp	(original)
+++ branches/proto/v3/boost/xpressive/detail/detail_fwd.hpp	2007-11-29 12:38:25 EST (Thu, 29 Nov 2007)
@@ -384,8 +384,11 @@
     };
     #endif
 
-    struct greedy_t : mpl::true_ {};
-    struct non_greedy_t : mpl::false_ {};
+    struct true_ : mpl::true_ {};
+    struct false_ : mpl::false_ {};
+
+    typedef true_ greedy_t;
+    typedef false_ non_greedy_t;
 
 }}} // namespace boost::xpressive::detail
 
Modified: branches/proto/v3/boost/xpressive/detail/static/grammar2.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/detail/static/grammar2.hpp	(original)
+++ branches/proto/v3/boost/xpressive/detail/static/grammar2.hpp	2007-11-29 12:38:25 EST (Thu, 29 Nov 2007)
@@ -52,13 +52,6 @@
     struct is_aggregate<xpressive::detail::mark_placeholder>
       : mpl::true_
     {};
-
-    // work around gcc bug.
-    template<unsigned int Min, unsigned int Max>
-    struct transform_category<xpressive::detail::generic_quant_tag<Min, Max> >
-    {
-        typedef no_transform type;
-    };
 }}
 
 namespace boost { namespace xpressive
@@ -544,6 +537,55 @@
             struct case_<tag::comma, Dummy>
               : when<ListSet<Char>, as_list_set>
             {};
+
+            template<typename Dummy>
+            struct case_<keeper_tag, Dummy>
+              : when<
+                    unary_expr<keeper_tag, Gram>
+                  , keeper_matcher<as_independent(_arg)>(as_independent(_arg))
+                >
+            {};
+
+            template<typename Dummy>
+            struct case_<lookahead_tag, Dummy>
+              : when<
+                    unary_expr<lookahead_tag, Gram>
+                  , lookahead_matcher<as_independent(_arg)>(as_independent(_arg), false_())
+                >
+            {};
+
+            template<typename Dummy>
+            struct case_<lookbehind_tag, Dummy>
+              : when<
+                    unary_expr<lookbehind_tag, Gram>
+                  , lookbehind_matcher<as_independent(_arg)>(
+                        as_independent(_arg)
+                      , get_width(as_independent(_arg))
+                      , false_()
+                    )
+                >
+            {};
+
+            template<typename Dummy>
+            struct case_<tag::complement, Dummy>
+              : or_<
+                    when<
+                        complement<unary_expr<lookahead_tag, Gram> >
+                      , lookahead_matcher<as_independent(_arg(_arg))>(
+                            as_independent(_arg(_arg))
+                          , true_()
+                        )
+                    >
+                  , when<
+                        complement<unary_expr<lookbehind_tag, Gram> >
+                      , lookbehind_matcher<as_independent(_arg(_arg))>(
+                            as_independent(_arg(_arg))
+                          , get_width(as_independent(_arg(_arg)))
+                          , true_()
+                        )
+                    >
+                >
+            {};
         };
 
     } // namespace detail