Rewrite markdown parsing, so we can extract links and quotes (and maybe more)

This commit is contained in:
Matthias Beyer 2015-12-06 11:01:45 +01:00
parent c35cd7ef15
commit 7b99aee552

View file

@ -1,10 +1,22 @@
pub fn extract_links(s: &String) -> Vec<String> {
mod markdown {
use pulldown_cmark::Parser;
use pulldown_cmark::Event;
use pulldown_cmark::Tag;
Parser::new(&s[..])
pub struct MarkdownParser<'a> {
text: &'a String
}
impl<'a> MarkdownParser<'a> {
pub fn new(s: &'a String) -> MarkdownParser {
MarkdownParser {
text: s
}
}
pub fn links(&self) -> Vec<String> {
Parser::new(&self.text[..])
.filter_map(|e| {
match e {
Event::Start(t) => Some(t),
@ -23,3 +35,26 @@ pub fn extract_links(s: &String) -> Vec<String> {
}).collect::<Vec<String>>()
}
pub fn codeblocks(&self) -> Vec<String> {
Parser::new(&self.text[..])
.filter_map(|e| {
match e {
Event::Start(t) => Some(t),
Event::End(t) => Some(t),
_ => None
}
})
.filter_map(|tag| {
match tag {
Tag::CodeBlock(text) => Some(text),
_ => None
}
})
.map(|text| {
text.into_owned()
}).collect::<Vec<String>>()
}
}
}