summaryrefslogtreecommitdiff
path: root/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 559ee3a..c81be74 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -172,6 +172,7 @@ impl WikitextParser {
let mut link_text = String::new();
#[allow(unused_assignments)]
let mut target = None;
+ let mut title = None;
self.drain(2);
loop {
let (line, col) = self.position();
@@ -190,10 +191,26 @@ impl WikitextParser {
self.drain(4);
break;
}
- _ => return Err(SiteError::wikitext_syntax(line, col, &self.tokens[..5])),
+ [TokenKind::ClosedBracket, TokenKind::OpenParens, TokenKind::Word(word), TokenKind::Spaces(_), TokenKind::QuotedValue(t), TokenKind::ClosedParens, ..] =>
+ {
+ target = Some(word.to_string());
+ title = Some(t.to_string());
+ self.drain(6);
+ break;
+ }
+ _ => return Err(SiteError::wikitext_syntax(line, col, &self.tokens[..std::cmp::min(5, self.tokens.len())])),
}
}
- Snippet::Markdown(format!("![{}]({})", link_text, target.unwrap()))
+ if let Some(title) = title {
+ Snippet::Markdown(format!(
+ "![{}]({} \"{}\")",
+ link_text,
+ target.unwrap(),
+ title
+ ))
+ } else {
+ Snippet::Markdown(format!("![{}]({})", link_text, target.unwrap()))
+ }
}
[TokenKind::Markdown(text), ..] => {
let snippet = Snippet::Markdown(text.to_string());