diff --git a/src/lib/epub.rs b/src/lib/epub.rs index 1244b66..aa784f3 100644 --- a/src/lib/epub.rs +++ b/src/lib/epub.rs @@ -384,13 +384,46 @@ impl<'a> EpubRenderer<'a> { /// /// See http://lise-henry.github.io/articles/rust_inheritance.html pub fn static_render_token(this: &mut T, token: &Token) -> Result - where T: AsMut>+AsRef> + Renderer { + where T: AsMut>+AsRef> + + AsMut>+AsRef> + 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!("

+ [{}] +

", + number, + number); + + let inner = format!("", + r#"epub:type="footnote""#, + number, + inner_content); + html.footnotes.push((note_number, inner)); + + Ok(format!("{}", + "epub:type = \"noteref\"", + number, number, number)) + } else { + HtmlRenderer::static_render_token(this, token) + } + }, + + _ => HtmlRenderer::static_render_token(this, token) } } } diff --git a/src/lib/html.rs b/src/lib/html.rs index 93bb592..df2a144 100644 --- a/src/lib/html.rs +++ b/src/lib/html.rs @@ -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> { [{}]

", number, number); - let inner = format!("", - if this.as_ref().epub3 {r#"epub:type="footnote"#}else{""}, - number, try!(this.render_vec(vec))); + let inner = format!("", + number, + try!(this.render_vec(vec))); this.as_mut().footnotes.push((note_number, inner)); - Ok(format!("{}", - if this.as_ref().epub3 {"epub:type = \"noteref\""} else {""}, - number, number, number)) + Ok(format!("{}", + number, number, number)) }, } } diff --git a/tests/test.book b/tests/test.book index e19942c..0dc9184 100644 --- a/tests/test.book +++ b/tests/test.book @@ -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