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