Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 1998-2009
4 : * John Maddock
5 : *
6 : * Use, modification and distribution are subject to the
7 : * Boost Software License, Version 1.0. (See accompanying file
8 : * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 : *
10 : */
11 :
12 : /*
13 : * LOCATION: see http://www.boost.org for most recent version.
14 : * FILE regex_format.hpp
15 : * VERSION see <boost/version.hpp>
16 : * DESCRIPTION: Provides formatting output routines for search and replace
17 : * operations. Note this is an internal header file included
18 : * by regex.hpp, do not include on its own.
19 : */
20 :
21 : #ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP
22 : #define BOOST_REGEX_V4_REGEX_REPLACE_HPP
23 :
24 :
25 : namespace boost{
26 :
27 : #ifdef BOOST_MSVC
28 : #pragma warning(push)
29 : #pragma warning(disable: 4103)
30 : #endif
31 : #ifdef BOOST_HAS_ABI_HEADERS
32 : # include BOOST_ABI_PREFIX
33 : #endif
34 : #ifdef BOOST_MSVC
35 : #pragma warning(pop)
36 : #endif
37 :
38 : template <class OutputIterator, class BidirectionalIterator, class traits, class charT, class Formatter>
39 0 : OutputIterator regex_replace(OutputIterator out,
40 : BidirectionalIterator first,
41 : BidirectionalIterator last,
42 : const basic_regex<charT, traits>& e,
43 : Formatter fmt,
44 : match_flag_type flags = match_default)
45 : {
46 0 : regex_iterator<BidirectionalIterator, charT, traits> i(first, last, e, flags);
47 0 : regex_iterator<BidirectionalIterator, charT, traits> j;
48 0 : if(i == j)
49 : {
50 0 : if(!(flags & regex_constants::format_no_copy))
51 0 : out = BOOST_REGEX_DETAIL_NS::copy(first, last, out);
52 : }
53 : else
54 : {
55 0 : BidirectionalIterator last_m(first);
56 0 : while(i != j)
57 : {
58 0 : if(!(flags & regex_constants::format_no_copy))
59 0 : out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out);
60 0 : out = i->format(out, fmt, flags, e);
61 0 : last_m = (*i)[0].second;
62 0 : if(flags & regex_constants::format_first_only)
63 : break;
64 0 : ++i;
65 : }
66 0 : if(!(flags & regex_constants::format_no_copy))
67 0 : out = BOOST_REGEX_DETAIL_NS::copy(last_m, last, out);
68 : }
69 0 : return out;
70 : }
71 :
72 : template <class traits, class charT, class Formatter>
73 : std::basic_string<charT> regex_replace(const std::basic_string<charT>& s,
74 : const basic_regex<charT, traits>& e,
75 : Formatter fmt,
76 : match_flag_type flags = match_default)
77 : {
78 : std::basic_string<charT> result;
79 : BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result);
80 : regex_replace(i, s.begin(), s.end(), e, fmt, flags);
81 : return result;
82 : }
83 :
84 : #ifdef BOOST_MSVC
85 : #pragma warning(push)
86 : #pragma warning(disable: 4103)
87 : #endif
88 : #ifdef BOOST_HAS_ABI_HEADERS
89 : # include BOOST_ABI_SUFFIX
90 : #endif
91 : #ifdef BOOST_MSVC
92 : #pragma warning(pop)
93 : #endif
94 :
95 : } // namespace boost
96 :
97 : #endif // BOOST_REGEX_V4_REGEX_REPLACE_HPP
98 :
99 :
|