tangled
alpha
login
or
join now
ecsolticia.codeberg.page
/
mipl
0
fork
atom
Minimal Imperative Parsing Library | https://docs.rs/mipl
0
fork
atom
overview
issues
pulls
pipelines
add newline matcher
ecsolticia.codeberg.page
5 months ago
e1942cb5
c3c21e0d
verified
This commit was signed with the committer's
known signature
.
ecsolticia.codeberg.page
SSH Key Fingerprint:
SHA256:lc5DuXVjJY1TR+bLCu3j+FiFhpWMq4nZ3jubBpodh1U=
+45
-1
3 changed files
expand all
collapse all
unified
split
src
parser
parsers
is_newline.rs
parsers.rs
tests
test_parsers.rs
+2
src/parser/parsers.rs
···
41
41
}
42
42
}
43
43
44
44
+
mod is_newline;
44
45
mod exact_match;
45
46
pub use {
46
47
exact_match::ExactMatch,
48
48
+
is_newline::IsNewline,
47
49
};
+15
src/parser/parsers/is_newline.rs
···
1
1
+
use crate::lexer::NewlineToken;
2
2
+
3
3
+
use super::*;
4
4
+
5
5
+
/// Match a newline.
6
6
+
pub struct IsNewline;
7
7
+
impl PeekerOperator<NewlineToken> for IsNewline {
8
8
+
fn peek_for(&self, parser: &mut Parser) -> Option<NewlineToken> {
9
9
+
if let Token::Newline(NewlineToken) = parser.peek()? {
10
10
+
Some(NewlineToken)
11
11
+
} else {
12
12
+
None
13
13
+
}
14
14
+
}
15
15
+
}
+28
-1
tests/test_parsers.rs
···
1
1
-
use mipl::parser::{*, parsers::Operator};
1
1
+
use mipl::parser::{*, parsers::*};
2
2
use mipl::lexer::del::*;
3
3
use mipl::lexer::*;
4
4
···
51
51
parser.next()
52
52
);
53
53
}
54
54
+
55
55
+
#[test]
56
56
+
fn test_is_newline() {
57
57
+
let d_vec: Vec<char> = vec![' '];
58
58
+
let d_del = DiscardDelimiters::new(d_vec);
59
59
+
let k_vec: Vec<char> = vec![];
60
60
+
let k_del = KeepDelimiters::new(k_vec);
61
61
+
let del_param = DelimitersParam {
62
62
+
keep: k_del, discard: d_del
63
63
+
};
64
64
+
65
65
+
let mut parser = Parser::from(
66
66
+
"lorem ipsum\ndolor sit amet",
67
67
+
del_param
68
68
+
);
69
69
+
70
70
+
let newline_parser = IsNewline;
71
71
+
72
72
+
assert_eq!(None, newline_parser.try_next(&mut parser));
73
73
+
74
74
+
parser.next();
75
75
+
parser.next();
76
76
+
77
77
+
assert_eq!(Some(NewlineToken), newline_parser.try_next(&mut parser));
78
78
+
79
79
+
assert_eq!(None, newline_parser.try_next(&mut parser));
80
80
+
}