3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 typedef std::basic_string
<T
> String
;
30 BasicStrfnd(const String
&s
) : str(s
), pos(0) {}
31 void start(const String
&s
) { str
= s
; pos
= 0; }
32 size_t where() { return pos
; }
33 void to(size_t i
) { pos
= i
; }
34 bool at_end() { return pos
>= str
.size(); }
35 String
what() { return str
; }
37 String
next(const String
&sep
)
39 if (pos
>= str
.size())
43 if (sep
.empty() || (n
= str
.find(sep
, pos
)) == String::npos
) {
46 String ret
= str
.substr(pos
, n
- pos
);
51 // Returns substr up to the next occurence of sep that isn't escaped with esc ('\\')
52 String
next_esc(const String
&sep
, T esc
=static_cast<T
>('\\'))
54 if (pos
>= str
.size())
57 size_t n
, old_p
= pos
;
59 if (sep
.empty() || (n
= str
.find(sep
, pos
)) == String::npos
) {
63 pos
= n
+ sep
.length();
64 } while (n
> 0 && str
[n
- 1] == esc
);
66 return str
.substr(old_p
, n
- old_p
);
69 void skip_over(const String
&chars
)
71 size_t p
= str
.find_first_not_of(chars
, pos
);
72 if (p
!= String::npos
)
77 typedef BasicStrfnd
<char> Strfnd
;
78 typedef BasicStrfnd
<wchar_t> WStrfnd
;