$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r66980 - sandbox/configurator/boost/configurator/detail
From: for.dshevchenko_at_[hidden]
Date: 2010-12-03 02:52:39
Author: dshevchenko
Date: 2010-12-03 02:52:33 EST (Fri, 03 Dec 2010)
New Revision: 66980
URL: http://svn.boost.org/trac/boost/changeset/66980
Log:
Add regex-es for sections parsing (it's easier).
Text files modified: 
   sandbox/configurator/boost/configurator/detail/pure_options_obtainer.hpp |    37 ++++++++++++++++++++++++-------------   
   1 files changed, 24 insertions(+), 13 deletions(-)
Modified: sandbox/configurator/boost/configurator/detail/pure_options_obtainer.hpp
==============================================================================
--- sandbox/configurator/boost/configurator/detail/pure_options_obtainer.hpp	(original)
+++ sandbox/configurator/boost/configurator/detail/pure_options_obtainer.hpp	2010-12-03 02:52:33 EST (Fri, 03 Dec 2010)
@@ -39,16 +39,30 @@
             , open_section_tag_begin_sign( "<" )
             , open_section_tag_end_sign( ">" )
             , close_section_tag_begin_sign( "</" )
-            , close_section_tag_end_sign( ">" ) {}
+            , close_section_tag_end_sign( ">" )
+            , regex_open_section_tag( "[" 
+                                      + open_section_tag_begin_sign
+                                      + "]{1}[a-zA-Z0-9_.-]{1,}["
+                                      + open_section_tag_end_sign
+                                      + "]{1}" )
+            , regex_close_section_tag( "[" 
+                                       + open_section_tag_begin_sign
+                                       + "]{1}[/]{1}[a-zA-Z0-9_.-]{1,}["
+                                       + open_section_tag_end_sign
+                                       + "]{1}" ) {}
 private:
     std::string&        option_name_value_separator;
     const std::string&  sections_separator;
     const str_set&      unique_names_of_sections;
     const bool&         case_sensitivity_for_names;
+private:
     const std::string   open_section_tag_begin_sign;
     const std::string   open_section_tag_end_sign;
     const std::string   close_section_tag_begin_sign;
     const std::string   close_section_tag_end_sign;
+    const boost::regex  regex_open_section_tag;
+    const boost::regex  regex_close_section_tag;
+private:
     std::string         current_section_path;
     str_set             nonmulti_sections_uniqueness_checker;
 public:
@@ -69,18 +83,7 @@
         nonmulti_sections_uniqueness_checker.clear();
         return factual_obtained_options;
     }
-private:
-    bool open_section_tag_exists_in_this( const std::string& s ) const {
-        return boost::contains( s, open_section_tag_begin_sign )
-               && boost::contains( s, open_section_tag_end_sign )
-               && !boost::contains( s, close_section_tag_begin_sign );
-    }
-
-    bool close_section_tag_exists_in_this( const std::string& s ) const {
-        return boost::contains( s, close_section_tag_begin_sign )
-               && boost::contains( s, close_section_tag_end_sign );
-    }
- 
+private: 
     bool option_exists_in_this( const std::string& s ) const {
         char separator = *option_name_value_separator.begin();
         bool extended_predicat = false;
@@ -91,6 +94,14 @@
         return boost::contains( s, option_name_value_separator )
                || extended_predicat ;
     }
+    
+    bool open_section_tag_exists_in_this( const std::string& s ) const {
+        return regex_match( s, regex_open_section_tag );
+    }
+
+    bool close_section_tag_exists_in_this( const std::string& s ) const {
+        return regex_match( s, regex_close_section_tag );
+    }
 private:
     void obtain_option( const std::string& s, pure_options& factual_obtained_options ) const {
         str_storage option_parts = get_option_parts_from( s );