Minimal Imperative Parsing Library | https://docs.rs/mipl
at main 37 lines 897 B view raw
1use mipl::prelude::*; 2 3fn first_emphasized_in_line(parser: &mut Parser) -> Option<String> { 4 let mut return_next: bool = false; 5 6 for tok in parser { 7 if let Token::Str(s) = tok { 8 if s == "*" { 9 return_next = true; 10 } else if return_next { 11 return Some(String::from(s)) 12 }; 13 } else { 14 return None; 15 } 16 } 17 18 None 19} 20 21#[test] 22fn test_first_emphasized_in_line() { 23 let d_vec: Vec<char> = vec![' ']; 24 let d_del = DiscardDelimiters::new(d_vec); 25 let k_vec: Vec<char> = vec!['*']; 26 let k_del = KeepDelimiters::new(k_vec); 27 let del_param = DelimitersParam { 28 keep: k_del, discard: d_del 29 }; 30 31 let mut parser = Parser::from( 32 "Can this check for *emphasis*?", 33 del_param 34 ); 35 36 assert_eq!("emphasis", first_emphasized_in_line(&mut parser).unwrap()); 37}