1
0
Fork 0
mirror of https://github.com/lise-henry/crowbook synced 2024-05-13 11:36:12 +02:00

Add support for task list items

This commit is contained in:
lise 2019-04-23 13:59:06 +02:00
parent b5c77b5510
commit 6e6c58ef49
7 changed files with 27 additions and 1 deletions

View File

@ -78,6 +78,7 @@ impl<'a> EpubRenderer<'a> {
let wrapper = if zip.test().is_ok() {
ZipCommandOrLibrary::Command(zip)
} else {
warn!("{}", lformat!("Could not run zip command, falling back to zip library"));
ZipCommandOrLibrary::Library(ZipLibrary::new()?)
};
let mut maker = EpubBuilder::new(wrapper)?;

View File

@ -495,6 +495,10 @@ impl<'a> HtmlRenderer<'a> {
}
Ok(this.as_mut().render_title_full(n, data)?)
}
Token::TaskItem(checked, ref vec) =>
Ok(format!("<input type = \"checkbox\" disabled = \"\" {}/>{}",
if checked { "checked = \"\"" } else { "" },
this.render_vec(vec)?)),
Token::Emphasis(ref vec) => Ok(format!("<em>{}</em>", this.render_vec(vec)?)),
Token::Strong(ref vec) => Ok(format!("<b>{}</b>", this.render_vec(vec)?)),
Token::Strikethrough(ref vec) => Ok(format!("<del>{}</del>", this.render_vec(vec)?)),

View File

@ -216,6 +216,7 @@ impl<'a> LatexRenderer<'a> {
.insert_str("papersize", self.book.options.get_str("tex.paper.size").unwrap())
.insert_bool("stdpage", self.book.options.get_bool("tex.stdpage").unwrap())
.insert_bool("use_url", self.book.features.url)
.insert_bool("use_taskitem", self.book.features.taskitem)
.insert_bool("use_tables", self.book.features.table)
.insert_bool("use_codeblocks", self.book.features.codeblock)
.insert_bool("use_images", self.book.features.image)
@ -366,6 +367,10 @@ impl<'a> Renderer for LatexRenderer<'a> {
content.push_str("}\n");
Ok(content)
}
Token::TaskItem(checked, ref vec) =>
Ok(format!("[{}] {}",
if checked { r"$\boxtimes$" } else { r"$\square$" },
self.render_vec(vec)?)),
Token::Emphasis(ref vec) => Ok(format!("\\emph{{{}}}", self.render_vec(vec)?)),
Token::Strong(ref vec) => Ok(format!("\\mdstrong{{{}}}", self.render_vec(vec)?)),
Token::Strikethrough(ref vec) => Ok(format!("\\sout{{{}}}", self.render_vec(vec)?)),

View File

@ -229,7 +229,8 @@ impl<'a> OdtRenderer<'a> {
Token::DescriptionItem(ref v) |
Token::DescriptionTerm(ref v) |
Token::DescriptionDetails(ref v) |
Token::Strikethrough(ref v) => {
Token::Strikethrough(ref v) |
Token::TaskItem(_, ref v) => {
warn!("{}", lformat!("ODT: Description list and strikethrough not handled in this output"));
self.render_vec(v)
}

View File

@ -45,6 +45,7 @@ pub struct Features {
pub subscript: bool,
pub superscript: bool,
pub strikethrough: bool,
pub taskitem: bool,
}
impl Features {
@ -61,6 +62,7 @@ impl Features {
subscript: false,
superscript: false,
strikethrough: false,
taskitem: false,
}
}
}
@ -80,6 +82,7 @@ impl BitOr for Features {
subscript: self.subscript | rhs.subscript,
superscript: self.superscript | rhs.superscript,
strikethrough: self.strikethrough | rhs.strikethrough,
taskitem: self.taskitem | rhs.taskitem,
}
}
}
@ -316,6 +319,10 @@ impl Parser {
NodeValue::SoftBreak => vec![Token::SoftBreak],
NodeValue::LineBreak => vec![Token::HardBreak],
NodeValue::Emph => vec![Token::Emphasis(inner)],
NodeValue::TaskItem(checked) => {
self.features.taskitem = true;
vec![Token::TaskItem(checked, inner)]
},
NodeValue::Strong => vec![Token::Strong(inner)],
NodeValue::Strikethrough => {
self.features.strikethrough = true;

View File

@ -58,6 +58,9 @@ pub enum Token {
/// Subscript, indicated with ~...~
Subscript(Vec<Token>),
/// TaskItem. `bool` indicates wheteh it is checked.
TaskItem(bool, Vec<Token>),
/// Unordered list, with a vector of `Item`s
List(Vec<Token>),
/// Ordered list, with a starting number, and a list of `Item`s
@ -142,6 +145,7 @@ impl Token {
Image(_, _, ref v) |
StandaloneImage(_, _, ref v) |
Strikethrough(ref v) |
TaskItem(_, ref v) |
Annotation(_, ref v) => Some(v),
__NonExhaustive => unreachable!(),
@ -177,6 +181,7 @@ impl Token {
Link(_, _, ref mut v) |
Image(_, _, ref mut v) |
Strikethrough(ref mut v) |
TaskItem(_, ref mut v) |
StandaloneImage(_, _, ref mut v) => Some(v),
__NonExhaustive => unreachable!(),

View File

@ -33,6 +33,9 @@
% Only included if strikethrough is used in the document
\usepackage[normalem]{ulem}
<</use_strikethrough>>
<<#use_taskitem>>
\usepackage{amssymb}
<</use_taskitem>>
<<#use_url>>
% Only included if URLs are used in the document
\usepackage[colorlinks=true,breaklinks=true,hypertexnames=false]{hyperref}