From 0fdef7105cf3a34c7fc8774b2ed1d438935bfe59 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 24 Jul 2022 07:58:25 +0300 Subject: fix: handle tables by not handling them The pipe token on its own wasn't handled, which broke tables. Works now. Sponsored-by: author --- src/directive/meta.rs | 2 +- src/parser.rs | 74 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/directive/meta.rs b/src/directive/meta.rs index 789a6b0..da595eb 100644 --- a/src/directive/meta.rs +++ b/src/directive/meta.rs @@ -10,7 +10,7 @@ pub struct Meta { impl Meta { pub const REQUIRED: &'static [&'static str] = &[]; - pub const ALLOWED: &'static [&'static str] = &["date", "link", "title"]; + pub const ALLOWED: &'static [&'static str] = &["date", "link", "title", "author"]; pub const ALLOW_ANY_UNNAMED: bool = false; fn set_title(&mut self, title: &str) { diff --git a/src/parser.rs b/src/parser.rs index 12a89e6..14f46c4 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -31,37 +31,6 @@ impl WikitextParser { } let snippet = match &self.tokens[..] { - [Token::Markdown(text), ..] => { - let snippet = Snippet::Markdown(text.to_string()); - self.tokens.drain(..1); - snippet - } - [Token::Spaces(s), ..] => { - let snippet = Snippet::Markdown(s.to_string()); - self.tokens.drain(..1); - snippet - } - [Token::Word(text), ..] => { - let snippet = Snippet::Markdown(text.to_string()); - self.tokens.drain(..1); - snippet - } - [Token::OpenParens, ..] => { - self.tokens.drain(..1); - Snippet::Markdown("(".into()) - } - [Token::ClosedParens, ..] => { - self.tokens.drain(..1); - Snippet::Markdown(")".into()) - } - [Token::OpenBracket, ..] => { - self.tokens.drain(..1); - Snippet::Markdown("[".into()) - } - [Token::ClosedBracket, ..] => { - self.tokens.drain(..1); - Snippet::Markdown("]".into()) - } [Token::OpenBrackets, Token::Word(target), Token::CloseBrackets, ..] => { let wikilink = WikiLink::new(target, target); let snippet = Snippet::WikiLink(wikilink); @@ -161,10 +130,53 @@ impl WikitextParser { } Snippet::Markdown(format!("![{}]({})", link_text, target.unwrap())) } + [Token::Markdown(text), ..] => { + let snippet = Snippet::Markdown(text.to_string()); + self.tokens.drain(..1); + snippet + } + [Token::Spaces(s), ..] => { + let snippet = Snippet::Markdown(s.to_string()); + self.tokens.drain(..1); + snippet + } + [Token::Word(text), ..] => { + let snippet = Snippet::Markdown(text.to_string()); + self.tokens.drain(..1); + snippet + } [Token::Equals, ..] => { self.tokens.drain(..1); Snippet::Markdown("=".into()) } + [Token::Pipe, ..] => { + self.tokens.drain(..1); + Snippet::Markdown("|".into()) + } + [Token::OpenParens, ..] => { + self.tokens.drain(..1); + Snippet::Markdown("(".into()) + } + [Token::ClosedParens, ..] => { + self.tokens.drain(..1); + Snippet::Markdown(")".into()) + } + [Token::OpenBracket, ..] => { + self.tokens.drain(..1); + Snippet::Markdown("[".into()) + } + [Token::ClosedBracket, ..] => { + self.tokens.drain(..1); + Snippet::Markdown("]".into()) + } + [Token::OpenBrackets, ..] => { + self.tokens.drain(..1); + Snippet::Markdown("[[".into()) + } + [Token::CloseBrackets, ..] => { + self.tokens.drain(..1); + Snippet::Markdown("]]".into()) + } _ => panic!("eeek: {:?}", self.tokens), }; Ok(Some(snippet)) -- cgit v1.2.1