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 | 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 | regex_iterator<BidirectionalIterator, charT, traits> i(first, last, e, flags); |
47 | regex_iterator<BidirectionalIterator, charT, traits> j; |
48 | if(i == j) |
49 | { |
50 | if(!(flags & regex_constants::format_no_copy)) |
51 | out = BOOST_REGEX_DETAIL_NS::copy(first, last, out); |
52 | } |
53 | else |
54 | { |
55 | BidirectionalIterator last_m(first); |
56 | while(i != j) |
57 | { |
58 | if(!(flags & regex_constants::format_no_copy)) |
59 | out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out); |
60 | out = i->format(out, fmt, flags, e); |
61 | last_m = (*i)[0].second; |
62 | if(flags & regex_constants::format_first_only) |
63 | break; |
64 | ++i; |
65 | } |
66 | if(!(flags & regex_constants::format_no_copy)) |
67 | out = BOOST_REGEX_DETAIL_NS::copy(last_m, last, out); |
68 | } |
69 | 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 | |
100 | |