parser
This commit is contained in:
parent
2fef529f57
commit
a85efe2056
22 changed files with 1776 additions and 7 deletions
32
src/elements/rule.rs
Normal file
32
src/elements/rule.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
pub struct Rule;
|
||||
|
||||
impl Rule {
|
||||
pub fn parse(src: &str) -> Option<usize> {
|
||||
let end = eol!(src);
|
||||
let leading = until_while!(src, 0, b'-', |c| c == b' ' || c == b'\t');
|
||||
if src[leading..end].chars().all(|c| c == '-') && end - leading > 4 {
|
||||
Some(end)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse() {
|
||||
assert!(Rule::parse("-----").is_some());
|
||||
assert!(Rule::parse("--------").is_some());
|
||||
assert!(Rule::parse(" -----").is_some());
|
||||
assert!(Rule::parse("\t\t-----").is_some());
|
||||
|
||||
assert!(Rule::parse("").is_none());
|
||||
assert!(Rule::parse("----").is_none());
|
||||
assert!(Rule::parse(" ----").is_none());
|
||||
assert!(Rule::parse(" 0----").is_none());
|
||||
assert!(Rule::parse("0 ----").is_none());
|
||||
assert!(Rule::parse("0------").is_none());
|
||||
assert!(Rule::parse("----0----").is_none());
|
||||
assert!(Rule::parse("\t\t----").is_none());
|
||||
assert!(Rule::parse("------0").is_none());
|
||||
assert!(Rule::parse("----- 0").is_none());
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue