mirror of
https://github.com/lise-henry/crowbook
synced 2024-05-21 23:46:08 +02:00
Move Epub3 handling out of HtmlRenderer (which didn't really dit it well anyway)
This commit is contained in:
parent
d60bbdda30
commit
b7e13ce59f
|
@ -384,13 +384,46 @@ impl<'a> EpubRenderer<'a> {
|
|||
///
|
||||
/// See http://lise-henry.github.io/articles/rust_inheritance.html
|
||||
pub fn static_render_token<T>(this: &mut T, token: &Token) -> Result<String>
|
||||
where T: AsMut<EpubRenderer<'a>>+AsRef<EpubRenderer<'a>> + Renderer {
|
||||
where T: AsMut<EpubRenderer<'a>>+AsRef<EpubRenderer<'a>> +
|
||||
AsMut<HtmlRenderer<'a>>+AsRef<HtmlRenderer<'a>> + Renderer
|
||||
{
|
||||
match *token {
|
||||
Token::Header(1, ref vec) => {
|
||||
try!(this.as_mut().find_title(vec));
|
||||
HtmlRenderer::static_render_token(this.as_mut(), token)
|
||||
{
|
||||
let epub: &mut EpubRenderer = this.as_mut();
|
||||
try!(epub.find_title(vec));
|
||||
}
|
||||
HtmlRenderer::static_render_token(this, token)
|
||||
},
|
||||
_ => HtmlRenderer::static_render_token(this.as_mut(), token)
|
||||
Token::Footnote(ref vec) => {
|
||||
let epub_version = (this.as_ref() as &HtmlRenderer).book.options.get_i32("epub.version").unwrap();
|
||||
if epub_version == 3 {
|
||||
let inner_content = try!(this.render_vec(vec));
|
||||
let html: &mut HtmlRenderer = this.as_mut();
|
||||
html.footnote_number += 1;
|
||||
let number = html.footnote_number;
|
||||
assert!(!vec.is_empty());
|
||||
let note_number = format!("<p class = \"note-number\">
|
||||
<a href = \"#note-source-{}\">[{}]</a>
|
||||
</p>",
|
||||
number,
|
||||
number);
|
||||
|
||||
let inner = format!("<aside {} id = \"note-dest-{}\">{}</aside>",
|
||||
r#"epub:type="footnote""#,
|
||||
number,
|
||||
inner_content);
|
||||
html.footnotes.push((note_number, inner));
|
||||
|
||||
Ok(format!("<a {} href = \"#note-dest-{}\"><sup id = \"note-source-{}\">{}</sup></a>",
|
||||
"epub:type = \"noteref\"",
|
||||
number, number, number))
|
||||
} else {
|
||||
HtmlRenderer::static_render_token(this, token)
|
||||
}
|
||||
},
|
||||
|
||||
_ => HtmlRenderer::static_render_token(this, token)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,8 +37,6 @@ use rustc_serialize::base64::{self, ToBase64};
|
|||
/// Also used by `EpubRenderer` and `HtmlDirRenderer`.
|
||||
pub struct HtmlRenderer<'a> {
|
||||
table_head: bool,
|
||||
footnote_number: u32,
|
||||
epub3: bool,
|
||||
verbatim: bool,
|
||||
link_number: u32,
|
||||
add_script: bool,
|
||||
|
@ -47,13 +45,13 @@ pub struct HtmlRenderer<'a> {
|
|||
first_letter: bool,
|
||||
first_paragraph: bool,
|
||||
|
||||
|
||||
// fields used by EpubRenderer so marked public but hidden
|
||||
#[doc(hidden)]
|
||||
/// Current footnote number
|
||||
pub footnote_number: u32,
|
||||
/// Book that must be renderer
|
||||
pub book: &'a Book,
|
||||
#[doc(hidden)]
|
||||
/// Source for error messages
|
||||
pub source: Source,
|
||||
#[doc(hidden)]
|
||||
/// Table of contents
|
||||
pub toc: Toc,
|
||||
#[doc(hidden)]
|
||||
pub footnotes: Vec<(String, String)>,
|
||||
|
@ -85,7 +83,6 @@ impl<'a> HtmlRenderer<'a> {
|
|||
table_head: false,
|
||||
footnote_number: 0,
|
||||
footnotes: vec!(),
|
||||
epub3: false,
|
||||
verbatim: false,
|
||||
filename: String::new(),
|
||||
handler: ResourceHandler::new(&book.logger),
|
||||
|
@ -519,14 +516,13 @@ impl<'a> HtmlRenderer<'a> {
|
|||
<a href = \"#note-source-{}\">[{}]</a>
|
||||
</p>", number, number);
|
||||
|
||||
let inner = format!("<aside {} id = \"note-dest-{}\">{}</aside>",
|
||||
if this.as_ref().epub3 {r#"epub:type="footnote"#}else{""},
|
||||
number, try!(this.render_vec(vec)));
|
||||
let inner = format!("<aside id = \"note-dest-{}\">{}</aside>",
|
||||
number,
|
||||
try!(this.render_vec(vec)));
|
||||
this.as_mut().footnotes.push((note_number, inner));
|
||||
|
||||
Ok(format!("<a {} href = \"#note-dest-{}\"><sup id = \"note-source-{}\">{}</sup></a>",
|
||||
if this.as_ref().epub3 {"epub:type = \"noteref\""} else {""},
|
||||
number, number, number))
|
||||
Ok(format!("<a href = \"#note-dest-{}\"><sup id = \"note-source-{}\">{}</sup></a>",
|
||||
number, number, number))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ title: Test
|
|||
# Make nb_char visible
|
||||
lang: fr
|
||||
|
||||
epub.version: 3
|
||||
|
||||
output.pdf: test_result.pdf
|
||||
output.html: test_result.html
|
||||
output.epub: test_result.epub
|
||||
|
|
Loading…
Reference in New Issue