1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#[macro_export]
macro_rules! take_until {
($slf:expr, $start:expr, $first:pat $(| $rest:pat)*) => {{
let mut __end = $start;
let mut __content_end = $start;
loop {
if let Some((e, c)) = $slf.one() {
__content_end = e;
match c {
$first $(| $rest)* => {
let (e, _) = take!($slf, e, $first $(| $rest)*);
__end = e;
break;
}
_ => {
__end = e;
$slf.step();
}
}
} else {
__content_end = $slf.source_len;
break;
}
}
(__end, &$slf.source_str[$start..__content_end])
}}
}
#[macro_export]
macro_rules! take {
($slf:expr, $start:expr, $first:pat $(| $rest:pat)*) => {{
let mut __end: usize = $start;
loop {
if let Some((__pos, __c)) = $slf.one() {
__end = __pos;
match __c {
$first $(| $rest)* => {},
_ => break,
}
$slf.step();
} else {
__end = $slf.source_len;
break;
}
}
(__end, &$slf.source_str[$start..__end])
}}
}