diff options
Diffstat (limited to 'src/parser.rs')
-rw-r--r-- | src/parser.rs | 21 |
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()); |