You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							81 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							81 lines
						
					
					
						
							2.5 KiB
						
					
					
				| /*============================================================================= | |
|     Copyright (c) 2002-2003 Hartmut Kaiser | |
|     http://spirit.sourceforge.net/ | |
|  | |
|     Use, modification and distribution is subject to 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) | |
| =============================================================================*/ | |
| #ifndef BOOST_SPIRIT_REGEX_IPP | |
| #define BOOST_SPIRIT_REGEX_IPP | |
|  | |
| /////////////////////////////////////////////////////////////////////////////// | |
| #include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp> | |
|  | |
| /////////////////////////////////////////////////////////////////////////////// | |
| namespace boost { namespace spirit { | |
| 
 | |
| BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN | |
| 
 | |
| namespace impl { | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////// | |
| // | |
| inline const char* rx_prefix(char) { return "\\A"; } | |
| inline const wchar_t* rx_prefix(wchar_t) { return L"\\A"; } | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////// | |
| // | |
| //  rx_parser class | |
| // | |
| /////////////////////////////////////////////////////////////////////////////// | |
| template <typename CharT = char> | |
| class rx_parser : public parser<rx_parser<CharT> > { | |
| 
 | |
| public: | |
|     typedef std::basic_string<CharT> string_t; | |
|     typedef rx_parser<CharT> self_t; | |
| 
 | |
|     rx_parser(CharT const *first, CharT const *last) | |
|     {  | |
|         rxstr = string_t(rx_prefix(CharT())) + string_t(first, last);  | |
|     } | |
| 
 | |
|     rx_parser(CharT const *first) | |
|     {  | |
|         rxstr = string_t(rx_prefix(CharT())) +  | |
|             string_t(first, impl::get_last(first));  | |
|     } | |
| 
 | |
|     template <typename ScannerT> | |
|     typename parser_result<self_t, ScannerT>::type | |
|     parse(ScannerT const& scan) const | |
|     { | |
|         boost::match_results<typename ScannerT::iterator_t> what; | |
|         boost::regex_search(scan.first, scan.last, what, rxstr, | |
|             boost::match_default); | |
| 
 | |
|         if (!what[0].matched) | |
|             return scan.no_match(); | |
| 
 | |
|         scan.first = what[0].second; | |
|         return scan.create_match(what[0].length(), nil_t(), | |
|             what[0].first, scan.first); | |
|     } | |
| 
 | |
| private: | |
| #if BOOST_VERSION >= 013300 | |
|     boost::basic_regex<CharT> rxstr;       // regular expression to match | |
| #else | |
|     boost::reg_expression<CharT> rxstr;    // regular expression to match | |
| #endif | |
| }; | |
| 
 | |
| }   // namespace impl | |
|  | |
| /////////////////////////////////////////////////////////////////////////////// | |
| BOOST_SPIRIT_CLASSIC_NAMESPACE_END | |
| 
 | |
| }} // namespace boost::spirit | |
|  | |
| #endif // BOOST_SPIRIT_REGEX_IPP
 | |
| 
 |