Update of /cvsroot/boost/boost/boost/xpressive/detail/dynamic
In directory 
sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv23603/boost/xpressive/detail/dynamic

Modified Files:
        parser_enum.hpp parser_traits.hpp 
Log Message:
named captures for dynamic regexes, doxygen comments

Index: parser_enum.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/xpressive/detail/dynamic/parser_enum.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- parser_enum.hpp     5 Mar 2007 02:56:28 -0000       1.3
+++ parser_enum.hpp     7 May 2007 04:41:25 -0000       1.4
@@ -49,6 +49,8 @@
     token_recurse,                      // ?R
     token_rule_assign,                  // ?$[name]=
     token_rule_ref,                     // ?$[name]
+    token_named_mark,                   // ?P<name>
+    token_named_mark_ref,               // ?P=name
 
     token_assert_begin_sequence,        // \A
     token_assert_end_sequence,          // \Z

Index: parser_traits.hpp
===================================================================
RCS file: 
/cvsroot/boost/boost/boost/xpressive/detail/dynamic/parser_traits.hpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- parser_traits.hpp   13 Mar 2007 06:41:51 -0000      1.7
+++ parser_traits.hpp   7 May 2007 04:41:25 -0000       1.8
@@ -231,13 +231,8 @@
             case BOOST_XPR_CHAR_(char_type, '!'): ++begin; return 
token_negative_lookahead;
             case BOOST_XPR_CHAR_(char_type, 'R'): ++begin; return 
token_recurse;
             case BOOST_XPR_CHAR_(char_type, '$'):
-                this->eat_ws_(++begin, end);
-                for( name.clear(); begin != end && 
this->traits().isctype(*begin, this->alnum_); ++begin)
-                {
-                    name.push_back(*begin);
-                }
-                this->eat_ws_(begin, end);
-                detail::ensure(begin != end && !name.empty(), error_paren, 
"incomplete extension");
+                this->get_name_(++begin, end, name);
+                detail::ensure(begin != end, error_paren, "incomplete 
extension");
                 if(BOOST_XPR_CHAR_(char_type, '=') == *begin)
                 {
                     ++begin;
@@ -256,6 +251,23 @@
                     throw regex_error(error_badbrace, "unrecognized 
extension");
                 }
 
+            case BOOST_XPR_CHAR_(char_type, 'P'):
+                this->eat_ws_(++begin, end);
+                detail::ensure(begin != end, error_paren, "incomplete 
extension");
+                switch(*begin)
+                {
+                case BOOST_XPR_CHAR_(char_type, '<'):
+                    this->get_name_(++begin, end, name);
+                    detail::ensure(begin != end && BOOST_XPR_CHAR_(char_type, 
'>') == *begin++, error_paren, "incomplete extension");
+                    return token_named_mark;
+                case BOOST_XPR_CHAR_(char_type, '='):
+                    this->get_name_(++begin, end, name);
+                    detail::ensure(begin != end, error_paren, "incomplete 
extension");
+                    return token_named_mark_ref;
+                default:
+                    throw regex_error(error_badbrace, "unrecognized 
extension");
+                }
+
             case BOOST_XPR_CHAR_(char_type, 'i'):
             case BOOST_XPR_CHAR_(char_type, 'm'):
             case BOOST_XPR_CHAR_(char_type, 's'):
@@ -389,6 +401,26 @@
         return this->traits().isctype(ch, this->space_);
     }
 
+    ///////////////////////////////////////////////////////////////////////////
+    // is_alnum_
+    bool is_alnum_(char_type ch) const
+    {
+        return this->traits().isctype(ch, this->alnum_);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // get_name_
+    void get_name_(iterator_type &begin, iterator_type end, string_type &name)
+    {
+        this->eat_ws_(begin, end);
+        for(name.clear(); begin != end && this->is_alnum_(*begin); ++begin)
+        {
+            name.push_back(*begin);
+        }
+        this->eat_ws_(begin, end);
+        detail::ensure(!name.empty(), regex_constants::error_paren, 
"incomplete extension");
+    }
+
     
///////////////////////////////////////////////////////////////////////////////
     // eat_ws_
     iterator_type &eat_ws_(iterator_type &begin, iterator_type end)


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to