1
0
mirror of https://github.com/lise-henry/crowbook synced 2024-09-27 01:30:44 +02:00

Add strikethrough feature

This commit is contained in:
lise 2019-03-15 03:59:08 +01:00
parent ae9be902c2
commit e2bd91a325
6 changed files with 22 additions and 4 deletions

View File

@ -497,6 +497,7 @@ impl<'a> HtmlRenderer<'a> {
} }
Token::Emphasis(ref vec) => Ok(format!("<em>{}</em>", 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::Strong(ref vec) => Ok(format!("<b>{}</b>", this.render_vec(vec)?)),
Token::Strikethrough(ref vec) => Ok(format!("<del>{}</del>", this.render_vec(vec)?)),
Token::Code(ref s) => Ok(format!("<code>{}</code>", escape::html(s))), Token::Code(ref s) => Ok(format!("<code>{}</code>", escape::html(s))),
Token::Subscript(ref vec) => Ok(format!("<sub>{}</sub>", this.render_vec(vec)?)), Token::Subscript(ref vec) => Ok(format!("<sub>{}</sub>", this.render_vec(vec)?)),
Token::Superscript(ref vec) => Ok(format!("<sup>{}</sup>", this.render_vec(vec)?)), Token::Superscript(ref vec) => Ok(format!("<sup>{}</sup>", this.render_vec(vec)?)),

View File

@ -219,6 +219,7 @@ impl<'a> LatexRenderer<'a> {
.insert_bool("use_tables", self.book.features.table) .insert_bool("use_tables", self.book.features.table)
.insert_bool("use_codeblocks", self.book.features.codeblock) .insert_bool("use_codeblocks", self.book.features.codeblock)
.insert_bool("use_images", self.book.features.image) .insert_bool("use_images", self.book.features.image)
.insert_bool("use_strikethrough", self.book.features.strikethrough)
.insert_str("tex_lang", tex_lang); .insert_str("tex_lang", tex_lang);
if let Ok(tex_tmpl_add) = self.book.options.get_str("tex.template.add") { if let Ok(tex_tmpl_add) = self.book.options.get_str("tex.template.add") {
data = data.insert_str("additional_code", tex_tmpl_add); data = data.insert_str("additional_code", tex_tmpl_add);
@ -367,6 +368,7 @@ impl<'a> Renderer for LatexRenderer<'a> {
} }
Token::Emphasis(ref vec) => Ok(format!("\\emph{{{}}}", 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::Strong(ref vec) => Ok(format!("\\mdstrong{{{}}}", self.render_vec(vec)?)),
Token::Strikethrough(ref vec) => Ok(format!("\\sout{{{}}}", self.render_vec(vec)?)),
Token::Code(ref s) => Ok(format!("\\mdcode{{{}}}", Token::Code(ref s) => Ok(format!("\\mdcode{{{}}}",
insert_breaks(s))), insert_breaks(s))),
Token::Superscript(ref vec) => Ok(format!("\\textsuperscript{{{}}}", self.render_vec(vec)?)), Token::Superscript(ref vec) => Ok(format!("\\textsuperscript{{{}}}", self.render_vec(vec)?)),

View File

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

View File

@ -43,6 +43,7 @@ pub struct Features {
pub url: bool, pub url: bool,
pub subscript: bool, pub subscript: bool,
pub superscript: bool, pub superscript: bool,
pub strikethrough: bool,
} }
impl Features { impl Features {
@ -58,6 +59,7 @@ impl Features {
url: false, url: false,
subscript: false, subscript: false,
superscript: false, superscript: false,
strikethrough: false,
} }
} }
} }
@ -77,6 +79,7 @@ impl BitOr for Features {
url: self.url | rhs.url, url: self.url | rhs.url,
subscript: self.subscript | rhs.subscript, subscript: self.subscript | rhs.subscript,
superscript: self.superscript | rhs.superscript, superscript: self.superscript | rhs.superscript,
strikethrough: self.strikethrough | rhs.strikethrough
} }
} }
} }
@ -346,7 +349,10 @@ impl Parser {
NodeValue::LineBreak => vec![Token::HardBreak], NodeValue::LineBreak => vec![Token::HardBreak],
NodeValue::Emph => vec![Token::Emphasis(inner)], NodeValue::Emph => vec![Token::Emphasis(inner)],
NodeValue::Strong => vec![Token::Strong(inner)], NodeValue::Strong => vec![Token::Strong(inner)],
NodeValue::Strikethrough => unimplemented!(), NodeValue::Strikethrough => {
self.features.strikethrough = true;
vec![Token::Strikethrough(inner)]
},
NodeValue::Superscript => vec![Token::Superscript(inner)], NodeValue::Superscript => vec![Token::Superscript(inner)],
NodeValue::Link(ref link) => { NodeValue::Link(ref link) => {
self.features.url = true; self.features.url = true;

View File

@ -1,4 +1,4 @@
// Copyright (C) 2016 Élisabeth HENRY. // Copyright (C) 2016-2019 Élisabeth HENRY.
// //
// This file is part of Crowbook. // This file is part of Crowbook.
// //
@ -45,6 +45,8 @@ pub enum Token {
/// **Strong**, a.k.a. bold /// **Strong**, a.k.a. bold
Strong(Vec<Token>), Strong(Vec<Token>),
/// `Code`, a.k.a. verbatim /// `Code`, a.k.a. verbatim
/// Strikethrough
Strikethrough(Vec<Token>),
Code(String), Code(String),
/// A quote /// A quote
BlockQuote(Vec<Token>), BlockQuote(Vec<Token>),
@ -136,6 +138,7 @@ impl Token {
Link(_, _, ref v) | Link(_, _, ref v) |
Image(_, _, ref v) | Image(_, _, ref v) |
StandaloneImage(_, _, ref v) | StandaloneImage(_, _, ref v) |
Strikethrough(ref v) |
Annotation(_, ref v) => Some(v), Annotation(_, ref v) => Some(v),
__NonExhaustive => unreachable!(), __NonExhaustive => unreachable!(),
@ -169,6 +172,7 @@ impl Token {
Footnote(ref mut v) | Footnote(ref mut v) |
Link(_, _, ref mut v) | Link(_, _, ref mut v) |
Image(_, _, ref mut v) | Image(_, _, ref mut v) |
Strikethrough(ref mut v) |
StandaloneImage(_, _, ref mut v) => Some(v), StandaloneImage(_, _, ref mut v) => Some(v),
__NonExhaustive => unreachable!(), __NonExhaustive => unreachable!(),

View File

@ -29,6 +29,10 @@
% Allows hyphenatations in \texttt % Allows hyphenatations in \texttt
\usepackage[htt]{hyphenat} \usepackage[htt]{hyphenat}
<<#use_strikethrough>>
% Only included if strikethrough is used in the document
\usepackage[normalem]{ulem}
<</use_strikethrough>>
<<#use_url>> <<#use_url>>
% Only included if URLs are used in the document % Only included if URLs are used in the document
\usepackage[colorlinks=true,breaklinks=true,hypertexnames=false]{hyperref} \usepackage[colorlinks=true,breaklinks=true,hypertexnames=false]{hyperref}