1
0
mirror of https://github.com/lise-henry/crowbook synced 2024-09-30 00:43:44 +02:00

Add image support for HtmlDirRenderer

This commit is contained in:
Elisabeth Henry 2016-03-05 22:33:30 +01:00
parent 21ec13a79a
commit a145d78cf5
3 changed files with 25 additions and 3 deletions

@ -25,7 +25,7 @@ output.odt:path # Output file name for ODT rendering
# Resources option # Resources option
resources.base_path:path # Path where to find resources (in the source tree). By default, links and images are relative to the Markdown file. If this is set, it will be to this path. resources.base_path:path # Path where to find resources (in the source tree). By default, links and images are relative to the Markdown file. If this is set, it will be to this path.
resources.base_path.links:path # Set base path but only for links. Useless if resources.base_path is set. resources.base_path.links:path # Set base path but only for links. Useless if resources.base_path is set.
resources.base_path.images:path # Set base path but only for images. Useless if resources.base_path is set. resources.base_path.images:path:. # Set base path but only for images. Useless if resources.base_path is set.
resources.base_path.files:path:. # Set base path but only for additional files. Useless if resources.base_path is set. resources.base_path.files:path:. # Set base path but only for additional files. Useless if resources.base_path is set.
resources.out_path:path:data # Paths where additional resources should be copied in the EPUB file or HTML directory resources.out_path:path:data # Paths where additional resources should be copied in the EPUB file or HTML directory
resources.files:str # Whitespace-separated list of files to embed in e.g. EPUB file resources.files:str # Whitespace-separated list of files to embed in e.g. EPUB file

@ -125,8 +125,9 @@ impl<'a> EpubRenderer<'a> {
} }
// Write all images (including cover) // Write all images (including cover)
let images_path = PathBuf::from(&self.book.options.get_path("resources.base_path.images").unwrap());
for (source, dest) in self.html.handler.images_mapping() { for (source, dest) in self.html.handler.images_mapping() {
let mut f = try!(File::open(self.book.root.join(source)).map_err(|_| Error::FileNotFound(source.to_owned()))); let mut f = try!(File::open(images_path.join(source)).map_err(|_| Error::FileNotFound(source.to_owned())));
let mut content = vec!(); let mut content = vec!();
try!(f.read_to_end(&mut content).map_err(|e| Error::Render(format!("error while reading image file: {}", e)))); try!(f.read_to_end(&mut content).map_err(|e| Error::Render(format!("error while reading image file: {}", e))));
try!(zipper.write(dest, &content, true)); try!(zipper.write(dest, &content, true));

@ -11,6 +11,7 @@ use std::fs;
use std::fs::File; use std::fs::File;
use std::path::Path; use std::path::Path;
use std::path::PathBuf; use std::path::PathBuf;
use std::borrow::Cow;
/// Multiple files HTML renderer /// Multiple files HTML renderer
/// ///
@ -56,9 +57,20 @@ impl<'a> HtmlDirRenderer<'a> {
.create(&dest_path) .create(&dest_path)
.map_err(|e| Error::Render(format!("could not create HTML directory {}:{}", &dest_path, e)))); .map_err(|e| Error::Render(format!("could not create HTML directory {}:{}", &dest_path, e))));
// Write CSS
try!(self.write_css()); try!(self.write_css());
// Write index.html and chapter_xxx.html
try!(self.write_html()); try!(self.write_html());
// Write all images (including cover)
let images_path = PathBuf::from(&self.book.options.get_path("resources.base_path.images").unwrap());
for (source, dest) in self.html.handler.images_mapping() {
let mut f = try!(File::open(images_path.join(source)).map_err(|_| Error::FileNotFound(source.to_owned())));
let mut content = vec!();
try!(f.read_to_end(&mut content).map_err(|e| Error::Render(format!("error while reading image file {}: {}", source, e))));
try!(self.write_file(dest, &content));
}
Ok(()) Ok(())
} }
@ -102,9 +114,18 @@ impl<'a> HtmlDirRenderer<'a> {
try!(self.write_file(&filenamer(i), &res)); try!(self.write_file(&filenamer(i), &res));
} }
let content = if let Ok(cover) = self.book.options.get_path("cover") {
format!("<div id = \"cover\">
<img class = \"cover\" alt = \"{}\" src = \"{}\" />
</div>",
self.book.options.get_str("title").unwrap(),
self.html.handler.map_image(Cow::Owned(cover)).as_ref())
} else {
String::new()
};
// Render index.html and write it too // Render index.html and write it too
let data = self.book.get_mapbuilder("none") let data = self.book.get_mapbuilder("none")
.insert_str("content", "") .insert_str("content", content)
.insert_str("toc", toc.clone()) .insert_str("toc", toc.clone())
.insert_bool(self.book.options.get_str("lang").unwrap(), true) .insert_bool(self.book.options.get_str("lang").unwrap(), true)
.build(); .build();