summaryrefslogtreecommitdiff
path: root/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs48
1 files changed, 33 insertions, 15 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 662ffd0..d283d90 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -1,9 +1,7 @@
-use crate::directive::Directive;
use crate::error::SiteError;
use crate::token::{Token, TokenParser, TokenPatterns};
use crate::wikitext::{ParsedDirective, Snippet, WikiLink};
use std::collections::HashMap;
-use std::convert::TryFrom;
#[derive(Debug)]
pub struct WikitextParser {
@@ -102,8 +100,7 @@ impl WikitextParser {
_ => panic!("yikes: {:?}", self.tokens),
}
}
- let p = ParsedDirective::new(&name, args)?;
- Snippet::Directive(Directive::try_from(p)?)
+ Snippet::Directive(ParsedDirective::new(&name, args)?)
}
[Token::Bang, Token::OpenBracket, ..] => {
let mut link_text = String::new();
@@ -200,8 +197,16 @@ impl WikitextParser {
#[cfg(test)]
mod test {
- use super::{Directive, Snippet, TokenPatterns, WikiLink, WikitextParser};
- use crate::directive::Img;
+ use super::{ParsedDirective, Snippet, TokenPatterns, WikiLink, WikitextParser};
+ use std::collections::HashMap;
+
+ fn parsed_directive(name: &str, kv: &[(&str, &str)]) -> ParsedDirective {
+ ParsedDirective::new(
+ name,
+ HashMap::from_iter(kv.iter().map(|(k, v)| (k.to_string(), v.to_string()))),
+ )
+ .unwrap()
+ }
#[test]
fn empty_input() {
@@ -285,7 +290,7 @@ mod test {
let mut p = WikitextParser::new("[[!simple]]", &patterns);
assert_eq!(
p.parse().unwrap(),
- Some(Snippet::Directive(Directive::Simple))
+ Some(Snippet::Directive(parsed_directive("simple", &[])))
);
assert_eq!(p.parse().unwrap(), None);
}
@@ -296,7 +301,10 @@ mod test {
let mut p = WikitextParser::new("[[!unnamedarg foo.jpg]]", &patterns);
assert_eq!(
p.parse().unwrap(),
- Some(Snippet::Directive(Directive::UnnamedArg))
+ Some(Snippet::Directive(parsed_directive(
+ "unnamedarg",
+ &[("foo.jpg", "")]
+ )))
);
assert_eq!(p.parse().unwrap(), None);
}
@@ -307,7 +315,10 @@ mod test {
let mut p = WikitextParser::new("[[!simplearg foo=bar]]", &patterns);
assert_eq!(
p.parse().unwrap(),
- Some(Snippet::Directive(Directive::SimpleArg))
+ Some(Snippet::Directive(parsed_directive(
+ "simplearg",
+ &[("foo", "bar")]
+ )))
);
assert_eq!(p.parse().unwrap(), None);
}
@@ -318,7 +329,10 @@ mod test {
let mut p = WikitextParser::new(r#"[[!quotedarg bar="foobar"]]"#, &patterns);
assert_eq!(
p.parse().unwrap(),
- Some(Snippet::Directive(Directive::QuotedArg))
+ Some(Snippet::Directive(parsed_directive(
+ "quotedarg",
+ &[("bar", "foobar")]
+ )))
);
assert_eq!(p.parse().unwrap(), None);
}
@@ -328,12 +342,15 @@ mod test {
let patterns = TokenPatterns::default();
let mut p = WikitextParser::new(
r#"[[!multilinearg yo="""foo
- bar"""]]"#,
+bar"""]]"#,
&patterns,
);
assert_eq!(
p.parse().unwrap(),
- Some(Snippet::Directive(Directive::MultilineArg))
+ Some(Snippet::Directive(parsed_directive(
+ "multilinearg",
+ &[("yo", "foo\nbar")]
+ )))
);
assert_eq!(p.parse().unwrap(), None);
}
@@ -344,9 +361,10 @@ mod test {
let mut p = WikitextParser::new(r#"[[!img foo.jpg class=image]]"#, &patterns);
assert_eq!(
p.parse().unwrap(),
- Some(Snippet::Directive(Directive::Img(Img::new(
- "foo.jpg".into()
- ))))
+ Some(Snippet::Directive(parsed_directive(
+ "img",
+ &[("foo.jpg", ""), ("class", "image")]
+ )))
);
assert_eq!(p.parse().unwrap(), None);
}