1
0
Fork 0
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:
Elisabeth Henry 2016-09-18 02:20:49 +02:00
parent d60bbdda30
commit b7e13ce59f
3 changed files with 49 additions and 18 deletions

View File

@ -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)
}
}
}

View File

@ -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))
},
}
}

View File

@ -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