mirror of
https://github.com/lise-henry/crowbook
synced 2024-06-03 15:56:42 +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
|
/// See http://lise-henry.github.io/articles/rust_inheritance.html
|
||||||
pub fn static_render_token<T>(this: &mut T, token: &Token) -> Result<String>
|
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 {
|
match *token {
|
||||||
Token::Header(1, ref vec) => {
|
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`.
|
/// Also used by `EpubRenderer` and `HtmlDirRenderer`.
|
||||||
pub struct HtmlRenderer<'a> {
|
pub struct HtmlRenderer<'a> {
|
||||||
table_head: bool,
|
table_head: bool,
|
||||||
footnote_number: u32,
|
|
||||||
epub3: bool,
|
|
||||||
verbatim: bool,
|
verbatim: bool,
|
||||||
link_number: u32,
|
link_number: u32,
|
||||||
add_script: bool,
|
add_script: bool,
|
||||||
|
@ -47,13 +45,13 @@ pub struct HtmlRenderer<'a> {
|
||||||
first_letter: bool,
|
first_letter: bool,
|
||||||
first_paragraph: bool,
|
first_paragraph: bool,
|
||||||
|
|
||||||
|
/// Current footnote number
|
||||||
// fields used by EpubRenderer so marked public but hidden
|
pub footnote_number: u32,
|
||||||
#[doc(hidden)]
|
/// Book that must be renderer
|
||||||
pub book: &'a Book,
|
pub book: &'a Book,
|
||||||
#[doc(hidden)]
|
/// Source for error messages
|
||||||
pub source: Source,
|
pub source: Source,
|
||||||
#[doc(hidden)]
|
/// Table of contents
|
||||||
pub toc: Toc,
|
pub toc: Toc,
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub footnotes: Vec<(String, String)>,
|
pub footnotes: Vec<(String, String)>,
|
||||||
|
@ -85,7 +83,6 @@ impl<'a> HtmlRenderer<'a> {
|
||||||
table_head: false,
|
table_head: false,
|
||||||
footnote_number: 0,
|
footnote_number: 0,
|
||||||
footnotes: vec!(),
|
footnotes: vec!(),
|
||||||
epub3: false,
|
|
||||||
verbatim: false,
|
verbatim: false,
|
||||||
filename: String::new(),
|
filename: String::new(),
|
||||||
handler: ResourceHandler::new(&book.logger),
|
handler: ResourceHandler::new(&book.logger),
|
||||||
|
@ -519,14 +516,13 @@ impl<'a> HtmlRenderer<'a> {
|
||||||
<a href = \"#note-source-{}\">[{}]</a>
|
<a href = \"#note-source-{}\">[{}]</a>
|
||||||
</p>", number, number);
|
</p>", number, number);
|
||||||
|
|
||||||
let inner = format!("<aside {} id = \"note-dest-{}\">{}</aside>",
|
let inner = format!("<aside id = \"note-dest-{}\">{}</aside>",
|
||||||
if this.as_ref().epub3 {r#"epub:type="footnote"#}else{""},
|
number,
|
||||||
number, try!(this.render_vec(vec)));
|
try!(this.render_vec(vec)));
|
||||||
this.as_mut().footnotes.push((note_number, inner));
|
this.as_mut().footnotes.push((note_number, inner));
|
||||||
|
|
||||||
Ok(format!("<a {} href = \"#note-dest-{}\"><sup id = \"note-source-{}\">{}</sup></a>",
|
Ok(format!("<a href = \"#note-dest-{}\"><sup id = \"note-source-{}\">{}</sup></a>",
|
||||||
if this.as_ref().epub3 {"epub:type = \"noteref\""} else {""},
|
number, number, number))
|
||||||
number, number, number))
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ title: Test
|
||||||
# Make nb_char visible
|
# Make nb_char visible
|
||||||
lang: fr
|
lang: fr
|
||||||
|
|
||||||
|
epub.version: 3
|
||||||
|
|
||||||
output.pdf: test_result.pdf
|
output.pdf: test_result.pdf
|
||||||
output.html: test_result.html
|
output.html: test_result.html
|
||||||
output.epub: test_result.epub
|
output.epub: test_result.epub
|
||||||
|
|
Loading…
Reference in New Issue