summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2022-12-04 08:45:25 +0000
committerLars Wirzenius <liw@liw.fi>2022-12-04 08:45:25 +0000
commit40ae4ab438a8c2f002c4ed6d1ec9a01fb64c0f4d (patch)
tree422eb2cc560b0f3d1090d8214dbeb242adfbbf5d
parentc458c223007ea2b33cd5840fdd0f5c5846f5ba0b (diff)
parentf825c698e8ed2db636b6b859b1b2849889f1895f (diff)
downloadriki-40ae4ab438a8c2f002c4ed6d1ec9a01fb64c0f4d.tar.gz
Merge branch 'fixes' into 'main'
fix: typo in heading See merge request larswirzenius/riki!69
-rw-r--r--riki.md4
-rw-r--r--src/directive/graph.rs1
-rw-r--r--src/directive/inline.rs2
-rw-r--r--src/parser.rs21
-rw-r--r--src/token.rs45
-rw-r--r--subplot/riki.rs2
6 files changed, 57 insertions, 18 deletions
diff --git a/riki.md b/riki.md
index 980e5b4..a64b8ac 100644
--- a/riki.md
+++ b/riki.md
@@ -207,10 +207,10 @@ then AST of site/page.mdwn matches that of output/page/index.html
~~~{#image-link .file}
-![my kitten](cat.jpg)
+![my kitten](cat.jpg "image-title")
~~~
-### Emphasised text
+### Emphasized text
_Requirement: Inline markup for emphasis must result in an em element
in HTML output._
diff --git a/src/directive/graph.rs b/src/directive/graph.rs
index ae90050..56a6ac8 100644
--- a/src/directive/graph.rs
+++ b/src/directive/graph.rs
@@ -19,5 +19,4 @@ impl DirectiveImplementation for Graph {
fn process(&self, _site: &Site, _meta: &mut PageMeta) -> Result<Processed, SiteError> {
Err(SiteError::UnimplementedDirective("graph".into()))
}
-
}
diff --git a/src/directive/inline.rs b/src/directive/inline.rs
index 9ddeef4..f4e18d7 100644
--- a/src/directive/inline.rs
+++ b/src/directive/inline.rs
@@ -3,8 +3,8 @@ use crate::error::SiteError;
use crate::page::PageMeta;
use crate::pagespec::PageSpec;
use crate::site::Site;
-use crate::wikitext::ParsedDirective;
use crate::util::make_relative_link;
+use crate::wikitext::ParsedDirective;
use std::path::Path;
#[derive(Debug, Default, Eq, PartialEq)]
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());
diff --git a/src/token.rs b/src/token.rs
index 0f2daaa..c1d2abc 100644
--- a/src/token.rs
+++ b/src/token.rs
@@ -10,10 +10,7 @@ pub struct Token {
impl Token {
fn new(token: TokenKind, pos: usize) -> Self {
debug!("Token: token={:?} pos={}", token, pos);
- Self {
- token,
- pos,
- }
+ Self { token, pos }
}
}
@@ -170,7 +167,10 @@ mod test {
fn plain_markdown() {
let patterns = TokenPatterns::default();
let mut p = parser("** hello, world", &patterns);
- assert_eq!(p.parse().token, TokenKind::Markdown("** hello, world".into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::Markdown("** hello, world".into())
+ );
assert_eq!(p.parse().token, TokenKind::End);
}
@@ -287,7 +287,10 @@ mod test {
fn single_quoted() {
let patterns = TokenPatterns::default();
let mut p = parser(r#""hello there""#, &patterns);
- assert_eq!(p.parse().token, TokenKind::QuotedValue(r#"hello there"#.into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue(r#"hello there"#.into())
+ );
assert_eq!(p.parse().token, TokenKind::End);
}
@@ -295,7 +298,10 @@ mod test {
fn triple_quoted() {
let patterns = TokenPatterns::default();
let mut p = parser(r#""""hello\nthere""""#, &patterns);
- assert_eq!(p.parse().token, TokenKind::QuotedValue(r#"hello\nthere"#.into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue(r#"hello\nthere"#.into())
+ );
assert_eq!(p.parse().token, TokenKind::End);
}
@@ -310,7 +316,10 @@ mod test {
assert_eq!(p.parse().token, TokenKind::Word("test".into()));
assert_eq!(p.parse().token, TokenKind::Equals);
- assert_eq!(p.parse().token, TokenKind::QuotedValue(r#"enabled(sidebar)"#.into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue(r#"enabled(sidebar)"#.into())
+ );
assert_eq!(p.parse().token, TokenKind::CloseBrackets);
assert_eq!(p.parse().token, TokenKind::End);
@@ -334,12 +343,18 @@ mod test {
assert_eq!(p.parse().token, TokenKind::Spaces(" ".into()));
assert_eq!(p.parse().token, TokenKind::Word("test".into()));
assert_eq!(p.parse().token, TokenKind::Equals);
- assert_eq!(p.parse().token, TokenKind::QuotedValue(r#"enabled(sidebar)"#.into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue(r#"enabled(sidebar)"#.into())
+ );
assert_eq!(p.parse().token, TokenKind::Spaces(" ".into()));
assert_eq!(p.parse().token, TokenKind::Word("then".into()));
assert_eq!(p.parse().token, TokenKind::Equals);
- assert_eq!(p.parse().token, TokenKind::QuotedValue("\n[[!sidebar]]\n".into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue("\n[[!sidebar]]\n".into())
+ );
assert_eq!(p.parse().token, TokenKind::Spaces(" ".into()));
assert_eq!(p.parse().token, TokenKind::Word("else".into()));
@@ -372,12 +387,18 @@ mod test {
assert_eq!(p.parse().token, TokenKind::Spaces(" ".into()));
assert_eq!(p.parse().token, TokenKind::Word("test".into()));
assert_eq!(p.parse().token, TokenKind::Equals);
- assert_eq!(p.parse().token, TokenKind::QuotedValue(r#"enabled(sidebar)"#.into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue(r#"enabled(sidebar)"#.into())
+ );
assert_eq!(p.parse().token, TokenKind::Spaces(" ".into()));
assert_eq!(p.parse().token, TokenKind::Word("then".into()));
assert_eq!(p.parse().token, TokenKind::Equals);
- assert_eq!(p.parse().token, TokenKind::QuotedValue("\n[[!sidebar]]\n".into()));
+ assert_eq!(
+ p.parse().token,
+ TokenKind::QuotedValue("\n[[!sidebar]]\n".into())
+ );
assert_eq!(p.parse().token, TokenKind::Spaces(" ".into()));
assert_eq!(p.parse().token, TokenKind::Word("else".into()));
diff --git a/subplot/riki.rs b/subplot/riki.rs
index 722b597..9575b55 100644
--- a/subplot/riki.rs
+++ b/subplot/riki.rs
@@ -81,6 +81,8 @@ impl MutVisitor for DropImageFigTitle {
if let Inline::Image(attr, alt, target) = inline {
if target.1 == "fig:" {
*inline = Inline::Image(attr.clone(), alt.to_vec(), (target.0.clone(), "".into()));
+ } else if let Some(rest) = target.1.strip_prefix("fig:") {
+ *inline = Inline::Image(attr.clone(), alt.to_vec(), (target.0.clone(), rest.into()));
}
}
}