pub fn parse_from_string(source: &str) -> Parser
Expand description
Create a parser from a string. The source name is set to <string>
.
Examples found in repository?
More examples
examples/numbers.rs (line 19)
7pub fn main() {
8 println!("Enter a number to see how Trivet parses it. Enter a blank line to stop.");
9 let numpar = NumberParser::new();
10 print!("> ");
11 let _ = stdout().flush();
12 for line in stdin().lock().lines() {
13 if line.is_err() {
14 break;
15 }
16 let line = line.unwrap();
17
18 // Consume any whitespace.
19 let mut parser = parse_from_string(&line);
20 parser.consume_ws();
21 if parser.is_at_eof() {
22 break;
23 }
24
25 // Try to read a number as pieces.
26 let parts = numpar.get_parts(parser.borrow_core());
27 println!("{:?}", parts);
28 if parts.is_apparent_float() {
29 let value: f64 = parts.into();
30 println!("f64: {}", value);
31 } else {
32 let value: i128 = parts.into();
33 println!("i128: {}", value);
34 }
35
36 // Go around again.
37 print!("> ");
38 let _ = stdout().flush();
39 }
40}
examples/book_primitives_lua.rs (lines 4-10)
1fn main() {
2 // Text to parse. Note that the comment ends on line 5 at column 12, with
3 // the first non-comment position at column 13.
4 let mut parser = trivet::parse_from_string(
5 r#"
6 --[[
7 I am a long form
8 Lua comment.
9 --]]"#,
10 );
11 parser.borrow_comment_parser().enable_c = false;
12 parser.borrow_comment_parser().enable_cpp = false;
13 parser.borrow_comment_parser().custom = Box::new(|parser: &mut trivet::ParserCore| -> bool {
14 if parser.peek_and_consume_chars(&['-', '-', '[', '[']) {
15 parser.take_until("--]]");
16 true
17 } else if parser.peek_and_consume_chars(&['-', '-']) {
18 parser.take_while(|ch| ch != '\n');
19 true
20 } else {
21 false
22 }
23 });
24 parser.borrow_comment_parser().enable_custom = true;
25 parser.consume_ws();
26 assert_eq!(parser.loc().to_string(), "<string>:5:13");
27 assert!(parser.is_at_eof());
28}
examples/book_datetime_tester.rs (line 15)
5fn main() {
6 let stdin = io::stdin();
7 for line in stdin.lock().lines() {
8 match line {
9 Err(msg) => {
10 println!("Error: {}", msg);
11 break;
12 }
13 Ok(text) => {
14 // Test what the line contains.
15 let mut parser = parse_from_string(&text);
16 parser.consume_ws();
17 if is_date(&mut parser) {
18 println!("is_date returns true");
19 }
20 if is_time(&mut parser) {
21 println!("is_time returns true");
22 }
23 let datetime = parse_date_time(&mut parser);
24 match datetime {
25 Err(msg) => {
26 println!("Error: {}", msg);
27 }
28 Ok(Some(value)) => {
29 println!("{}", value);
30 }
31 Ok(None) => {
32 println!("Entry is not a date or time; ignoring.");
33 }
34 }
35 }
36 }
37 }
38}